60c06040523480156200001157600080fd5b506040516200535f3803806200535f83398181016040528101906200003791906200074f565b8484620000596200004d6200013160201b60201c565b6200013960201b60201c565b60008060146101000a81548160ff02191690831515021790555081600190805190602001906200008b92919062000462565b508060029080519060200190620000a492919062000462565b50505060004690508060a08181525050620000c581620001fd60201b60201c565b608081815250505081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e819055506200012683620002a960201b60201c565b505050505062000a26565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620002306200030e60201b60201c565b805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012084306040516020016200028c95949392919062000871565b604051602081830303815290604052805190602001209050919050565b620002b9620003a860201b60201c565b7f52a952209e64d8512168c7e0c58e7ad3fb76bb5c543c46878acb89d2d9c5326b81604051620002ea91906200092b565b60405180910390a180600c90805190602001906200030a92919062000462565b5050565b6060600180546200031f906200097e565b80601f01602080910402602001604051908101604052809291908181526020018280546200034d906200097e565b80156200039e5780601f1062000372576101008083540402835291602001916200039e565b820191906000526020600020905b8154815290600101906020018083116200038057829003601f168201915b5050505050905090565b620003b86200013160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003de6200043960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000437576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042e9062000a04565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000470906200097e565b90600052602060002090601f016020900481019282620004945760008555620004e0565b82601f10620004af57805160ff1916838001178555620004e0565b82800160010185558215620004e0579182015b82811115620004df578251825591602001919060010190620004c2565b5b509050620004ef9190620004f3565b5090565b5b808211156200050e576000816000905550600101620004f4565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200057b8262000530565b810181811067ffffffffffffffff821117156200059d576200059c62000541565b5b80604052505050565b6000620005b262000512565b9050620005c0828262000570565b919050565b600067ffffffffffffffff821115620005e357620005e262000541565b5b620005ee8262000530565b9050602081019050919050565b60005b838110156200061b578082015181840152602081019050620005fe565b838111156200062b576000848401525b50505050565b6000620006486200064284620005c5565b620005a6565b9050828152602081018484840111156200066757620006666200052b565b5b62000674848285620005fb565b509392505050565b600082601f83011262000694576200069362000526565b5b8151620006a684826020860162000631565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006dc82620006af565b9050919050565b620006ee81620006cf565b8114620006fa57600080fd5b50565b6000815190506200070e81620006e3565b92915050565b6000819050919050565b620007298162000714565b81146200073557600080fd5b50565b60008151905062000749816200071e565b92915050565b600080600080600060a086880312156200076e576200076d6200051c565b5b600086015167ffffffffffffffff8111156200078f576200078e62000521565b5b6200079d888289016200067c565b955050602086015167ffffffffffffffff811115620007c157620007c062000521565b5b620007cf888289016200067c565b945050604086015167ffffffffffffffff811115620007f357620007f262000521565b5b62000801888289016200067c565b93505060606200081488828901620006fd565b9250506080620008278882890162000738565b9150509295509295909350565b6000819050919050565b620008498162000834565b82525050565b6200085a8162000714565b82525050565b6200086b81620006cf565b82525050565b600060a0820190506200088860008301886200083e565b6200089760208301876200083e565b620008a660408301866200083e565b620008b560608301856200084f565b620008c4608083018462000860565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b6000620008f782620008ce565b620009038185620008d9565b935062000915818560208601620005fb565b620009208162000530565b840191505092915050565b60006020820190508181036000830152620009478184620008ea565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200099757607f821691505b60208210811415620009ae57620009ad6200094f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620009ec602083620008d9565b9150620009f982620009b4565b602082019050919050565b6000602082019050818103600083015262000a1f81620009dd565b9050919050565b60805160a05161491362000a4c6000396000610a4e01526000610a8301526149136000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80635c975abb1161011a57806392eefe9b116100ad578063b88d4fde1161007c578063b88d4fde146105c5578063c87b56dd146105e1578063e985e9c514610611578063f2fde38b14610641578063f77c47911461065d57610206565b806392eefe9b1461055357806394d008ef1461056f57806395d89b411461058b578063a22cb465146105a957610206565b8063715018a6116100e9578063715018a6146104f15780637ecebe00146104fb5780638456cb591461052b5780638da5cb5b1461053557610206565b80635c975abb146104555780636352211e146104735780636c0360eb146104a357806370a08231146104c157610206565b80632f745c591161019d57806342842e0e1161016c57806342842e0e146103b557806342966c68146103d157806348613c28146103ed5780634f6ccce71461040957806355f804b31461043957610206565b80632f745c591461033f57806330adf81f1461036f5780633644e5151461038d5780633f4ba83a146103ab57610206565b8063095ea7b3116101d9578063095ea7b3146102b95780630c0b85f5146102d557806318160ddd1461030557806323b872dd1461032357610206565b806301ffc9a71461020b57806306fdde031461023b57806307c6e64e14610259578063081812fc14610289575b600080fd5b61022560048036038101906102209190612ff3565b61067b565b604051610232919061303b565b60405180910390f35b61024361069d565b60405161025091906130ef565b60405180910390f35b610273600480360381019061026e91906131a5565b61072f565b6040516102809190613225565b60405180910390f35b6102a3600480360381019061029e9190613240565b61079a565b6040516102b0919061327c565b60405180910390f35b6102d360048036038101906102ce9190613297565b6107e0565b005b6102ef60048036038101906102ea9190613240565b6108f8565b6040516102fc91906132e6565b60405180910390f35b61030d610910565b60405161031a91906132e6565b60405180910390f35b61033d60048036038101906103389190613301565b61091d565b005b61035960048036038101906103549190613297565b61097d565b60405161036691906132e6565b60405180910390f35b610377610a22565b6040516103849190613225565b60405180910390f35b610395610a46565b6040516103a29190613225565b60405180910390f35b6103b3610aa9565b005b6103cf60048036038101906103ca9190613301565b610abb565b005b6103eb60048036038101906103e69190613240565b610adb565b005b610407600480360381019061040291906133b9565b610b37565b005b610423600480360381019061041e9190613240565b610cb3565b60405161043091906132e6565b60405180910390f35b610453600480360381019061044e919061357b565b610d24565b005b61045d610d7d565b60405161046a919061303b565b60405180910390f35b61048d60048036038101906104889190613240565b610d93565b60405161049a919061327c565b60405180910390f35b6104ab610e1a565b6040516104b891906130ef565b60405180910390f35b6104db60048036038101906104d691906135c4565b610ea8565b6040516104e891906132e6565b60405180910390f35b6104f9610f60565b005b610515600480360381019061051091906135c4565b610f74565b60405161052291906132e6565b60405180910390f35b610533610fbd565b005b61053d610fcf565b60405161054a919061327c565b60405180910390f35b61056d600480360381019061056891906135c4565b610ff8565b005b61058960048036038101906105849190613692565b611044565b005b610593611154565b6040516105a091906130ef565b60405180910390f35b6105c360048036038101906105be919061372d565b6111e6565b005b6105df60048036038101906105da919061376d565b6111fc565b005b6105fb60048036038101906105f69190613240565b61125e565b60405161060891906130ef565b60405180910390f35b61062b600480360381019061062691906137f0565b6112c6565b604051610638919061303b565b60405180910390f35b61065b600480360381019061065691906135c4565b61135a565b005b6106656113de565b604051610672919061327c565b60405180910390f35b600061068682611404565b8061069657506106958261147e565b5b9050919050565b6060600180546106ac9061385f565b80601f01602080910402602001604051908101604052809291908181526020018280546106d89061385f565b80156107255780601f106106fa57610100808354040283529160200191610725565b820191906000526020600020905b81548152906001019060200180831161070857829003601f168201915b5050505050905090565b600061079061073c610a46565b7fdaab21af31ece73a508939fedd476a5ee5129a5ed4bb091f3236ffb45394df6287878787604051602001610775959493929190613891565b604051602081830303815290604052805190602001206114f7565b9050949350505050565b60006107a582611538565b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107eb82610d93565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561085c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085390613956565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661087b611583565b73ffffffffffffffffffffffffffffffffffffffff1614806108aa57506108a9816108a4611583565b6112c6565b5b6108e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e0906139e8565b60405180910390fd5b6108f3838361158b565b505050565b600f6020528060005260406000206000915090505481565b6000600a80549050905090565b61092e610928611583565b82611644565b61096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490613a7a565b60405180910390fd5b6109788383836116d9565b505050565b600061098883610ea8565b82106109c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c090613b0c565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b7fdaab21af31ece73a508939fedd476a5ee5129a5ed4bb091f3236ffb45394df6281565b6000804690507f00000000000000000000000000000000000000000000000000000000000000008114610a8157610a7c816119d3565b610aa3565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b610ab1611a75565b610ab9611af3565b565b610ad6838383604051806020016040528060008152506111fc565b505050565b610aec610ae6611583565b82611644565b610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2290613b9e565b60405180910390fd5b610b3481611b55565b50565b42841015610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7190613c30565b60405180910390fd5b6000610bc78787600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548861072f565b90506000610bd782868686611ca3565b5090508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f90613cc2565b60405180910390fd5b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610c9890613d11565b9190505550610ca988886001611d86565b5050505050505050565b6000610cbd610910565b8210610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590613dcc565b60405180910390fd5b600a8281548110610d1257610d11613dec565b5b90600052602060002001549050919050565b610d2c611a75565b7f52a952209e64d8512168c7e0c58e7ad3fb76bb5c543c46878acb89d2d9c5326b81604051610d5b91906130ef565b60405180910390a180600c9080519060200190610d79929190612ee4565b5050565b60008060149054906101000a900460ff16905090565b600080610d9f83611ef3565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890613e67565b60405180910390fd5b80915050919050565b600c8054610e279061385f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e539061385f565b8015610ea05780601f10610e7557610100808354040283529160200191610ea0565b820191906000526020600020905b815481529060010190602001808311610e8357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090613ef9565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f68611a75565b610f726000611f30565b565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fc5611a75565b610fcd611ff4565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611000611a75565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611085611583565b73ffffffffffffffffffffffffffffffffffffffff1614806110e057506110aa610fcf565b73ffffffffffffffffffffffffffffffffffffffff166110c8611583565b73ffffffffffffffffffffffffffffffffffffffff16145b61111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690613f8b565b60405180910390fd5b61112a838383612057565b600e54426111389190613fab565b600f600084815260200190815260200160002081905550505050565b6060600280546111639061385f565b80601f016020809104026020016040519081016040528092919081815260200182805461118f9061385f565b80156111dc5780601f106111b1576101008083540402835291602001916111dc565b820191906000526020600020905b8154815290600101906020018083116111bf57829003601f168201915b5050505050905090565b6111f86111f1611583565b8383611d86565b5050565b61120d611207611583565b83611644565b61124c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124390613a7a565b60405180910390fd5b611258848484846120b2565b50505050565b606061126982611538565b600061127361210e565b9050600081511161129357604051806020016040528060008152506112be565b8061129d846121a0565b6040516020016112ae92919061403d565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611362611a75565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c9906140d3565b60405180910390fd5b6113db81611f30565b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061147757506114768261147e565b5b9050919050565b60007eeb673d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806114f057506114ef82612278565b5b9050919050565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b6115418161235a565b611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790613e67565b60405180910390fd5b50565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115fe83610d93565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061165083610d93565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611692575061169181856112c6565b5b806116d057508373ffffffffffffffffffffffffffffffffffffffff166116b88461079a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116f982610d93565b73ffffffffffffffffffffffffffffffffffffffff161461174f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174690614165565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b6906141f7565b60405180910390fd5b6117cc838383600161239b565b8273ffffffffffffffffffffffffffffffffffffffff166117ec82610d93565b73ffffffffffffffffffffffffffffffffffffffff1614611842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183990614165565b60405180910390fd5b6005600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119ce838383600161244a565b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6119fe61069d565b805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208430604051602001611a58959493929190614217565b604051602081830303815290604052805190602001209050919050565b611a7d611583565b73ffffffffffffffffffffffffffffffffffffffff16611a9b610fcf565b73ffffffffffffffffffffffffffffffffffffffff1614611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae8906142b6565b60405180910390fd5b565b611afb612450565b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611b3e611583565b604051611b4b919061327c565b60405180910390a1565b6000611b6082610d93565b9050611b7081600084600161239b565b611b7982610d93565b90506005600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c9f81600084600161244a565b5050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611cde576000600391509150611d7d565b600060018787878760405160008152602001604052604051611d0394939291906142e5565b6020604051602081039080840390855afa158015611d25573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d7457600060019250925050611d7d565b80600092509250505b94509492505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dec90614376565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ee6919061303b565b60405180910390a3505050565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ffc612499565b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612040611583565b60405161204d919061327c565b60405180910390a1565b61206183836124e3565b61206e6000848484612701565b6120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490614408565b60405180910390fd5b505050565b6120bd8484846116d9565b6120c984848484612701565b612108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ff90614408565b60405180910390fd5b50505050565b6060600c805461211d9061385f565b80601f01602080910402602001604051908101604052809291908181526020018280546121499061385f565b80156121965780601f1061216b57610100808354040283529160200191612196565b820191906000526020600020905b81548152906001019060200180831161217957829003601f168201915b5050505050905090565b6060600060016121af84612898565b01905060008167ffffffffffffffff8111156121ce576121cd613450565b5b6040519080825280601f01601f1916602001820160405280156122005781602001600182028036833780820191505090505b509050600082602001820190505b60011561226d578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161225757612256614428565b5b04945060008514156122685761226d565b61220e565b819350505050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061234357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123535750612352826129eb565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1661237c83611ef3565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6123a784848484612a55565b6123af610d7d565b156123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e6906144c9565b60405180910390fd5b42600f60008481526020019081526020016000205410612444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b90614535565b60405180910390fd5b50505050565b50505050565b612458610d7d565b612497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248e906145a1565b60405180910390fd5b565b6124a1610d7d565b156124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d89061460d565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90614679565b60405180910390fd5b61255c8161235a565b1561259c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612593906146e5565b60405180910390fd5b6125aa60008383600161239b565b6125b38161235a565b156125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea906146e5565b60405180910390fd5b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126fd60008383600161244a565b5050565b60006127228473ffffffffffffffffffffffffffffffffffffffff16612bb5565b1561288b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261274b611583565b8786866040518563ffffffff1660e01b815260040161276d949392919061475a565b602060405180830381600087803b15801561278757600080fd5b505af19250505080156127b857506040513d601f19601f820116820180604052508101906127b591906147bb565b60015b61283b573d80600081146127e8576040519150601f19603f3d011682016040523d82523d6000602084013e6127ed565b606091505b50600081511415612833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282a90614408565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612890565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106128f6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816128ec576128eb614428565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612933576d04ee2d6d415b85acef8100000000838161292957612928614428565b5b0492506020810190505b662386f26fc10000831061296257662386f26fc10000838161295857612957614428565b5b0492506010810190505b6305f5e100831061298b576305f5e100838161298157612980614428565b5b0492506008810190505b61271083106129b05761271083816129a6576129a5614428565b5b0492506004810190505b606483106129d357606483816129c9576129c8614428565b5b0492506002810190505b600a83106129e2576001810190505b80915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a6184848484612bd8565b6001811115612aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9c9061485a565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612aed57612ae881612bde565b612b2c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612b2b57612b2a8582612c27565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b6f57612b6a81612d94565b612bae565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612bad57612bac8482612e65565b5b5b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b50505050565b600a80549050600b600083815260200190815260200160002081905550600a81908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c3484610ea8565b612c3e919061487a565b9050600060096000848152602001908152602001600020549050818114612d23576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816009600083815260200190815260200160002081905550505b6009600084815260200190815260200160002060009055600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600a80549050612da8919061487a565b90506000600b60008481526020019081526020016000205490506000600a8381548110612dd857612dd7613dec565b5b9060005260206000200154905080600a8381548110612dfa57612df9613dec565b5b906000526020600020018190555081600b600083815260200190815260200160002081905550600b600085815260200190815260200160002060009055600a805480612e4957612e486148ae565b5b6001900381819060005260206000200160009055905550505050565b6000612e7083610ea8565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806009600084815260200190815260200160002081905550505050565b828054612ef09061385f565b90600052602060002090601f016020900481019282612f125760008555612f59565b82601f10612f2b57805160ff1916838001178555612f59565b82800160010185558215612f59579182015b82811115612f58578251825591602001919060010190612f3d565b5b509050612f669190612f6a565b5090565b5b80821115612f83576000816000905550600101612f6b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fd081612f9b565b8114612fdb57600080fd5b50565b600081359050612fed81612fc7565b92915050565b60006020828403121561300957613008612f91565b5b600061301784828501612fde565b91505092915050565b60008115159050919050565b61303581613020565b82525050565b6000602082019050613050600083018461302c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613090578082015181840152602081019050613075565b8381111561309f576000848401525b50505050565b6000601f19601f8301169050919050565b60006130c182613056565b6130cb8185613061565b93506130db818560208601613072565b6130e4816130a5565b840191505092915050565b6000602082019050818103600083015261310981846130b6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061313c82613111565b9050919050565b61314c81613131565b811461315757600080fd5b50565b60008135905061316981613143565b92915050565b6000819050919050565b6131828161316f565b811461318d57600080fd5b50565b60008135905061319f81613179565b92915050565b600080600080608085870312156131bf576131be612f91565b5b60006131cd8782880161315a565b94505060206131de8782880161315a565b93505060406131ef87828801613190565b925050606061320087828801613190565b91505092959194509250565b6000819050919050565b61321f8161320c565b82525050565b600060208201905061323a6000830184613216565b92915050565b60006020828403121561325657613255612f91565b5b600061326484828501613190565b91505092915050565b61327681613131565b82525050565b6000602082019050613291600083018461326d565b92915050565b600080604083850312156132ae576132ad612f91565b5b60006132bc8582860161315a565b92505060206132cd85828601613190565b9150509250929050565b6132e08161316f565b82525050565b60006020820190506132fb60008301846132d7565b92915050565b60008060006060848603121561331a57613319612f91565b5b60006133288682870161315a565b93505060206133398682870161315a565b925050604061334a86828701613190565b9150509250925092565b600060ff82169050919050565b61336a81613354565b811461337557600080fd5b50565b60008135905061338781613361565b92915050565b6133968161320c565b81146133a157600080fd5b50565b6000813590506133b38161338d565b92915050565b60008060008060008060c087890312156133d6576133d5612f91565b5b60006133e489828a0161315a565b96505060206133f589828a0161315a565b955050604061340689828a01613190565b945050606061341789828a01613378565b935050608061342889828a016133a4565b92505060a061343989828a016133a4565b9150509295509295509295565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613488826130a5565b810181811067ffffffffffffffff821117156134a7576134a6613450565b5b80604052505050565b60006134ba612f87565b90506134c6828261347f565b919050565b600067ffffffffffffffff8211156134e6576134e5613450565b5b6134ef826130a5565b9050602081019050919050565b82818337600083830152505050565b600061351e613519846134cb565b6134b0565b90508281526020810184848401111561353a5761353961344b565b5b6135458482856134fc565b509392505050565b600082601f83011261356257613561613446565b5b813561357284826020860161350b565b91505092915050565b60006020828403121561359157613590612f91565b5b600082013567ffffffffffffffff8111156135af576135ae612f96565b5b6135bb8482850161354d565b91505092915050565b6000602082840312156135da576135d9612f91565b5b60006135e88482850161315a565b91505092915050565b600067ffffffffffffffff82111561360c5761360b613450565b5b613615826130a5565b9050602081019050919050565b6000613635613630846135f1565b6134b0565b9050828152602081018484840111156136515761365061344b565b5b61365c8482856134fc565b509392505050565b600082601f83011261367957613678613446565b5b8135613689848260208601613622565b91505092915050565b6000806000606084860312156136ab576136aa612f91565b5b60006136b98682870161315a565b93505060206136ca86828701613190565b925050604084013567ffffffffffffffff8111156136eb576136ea612f96565b5b6136f786828701613664565b9150509250925092565b61370a81613020565b811461371557600080fd5b50565b60008135905061372781613701565b92915050565b6000806040838503121561374457613743612f91565b5b60006137528582860161315a565b925050602061376385828601613718565b9150509250929050565b6000806000806080858703121561378757613786612f91565b5b60006137958782880161315a565b94505060206137a68782880161315a565b93505060406137b787828801613190565b925050606085013567ffffffffffffffff8111156137d8576137d7612f96565b5b6137e487828801613664565b91505092959194509250565b6000806040838503121561380757613806612f91565b5b60006138158582860161315a565b92505060206138268582860161315a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061387757607f821691505b6020821081141561388b5761388a613830565b5b50919050565b600060a0820190506138a66000830188613216565b6138b3602083018761326d565b6138c0604083018661326d565b6138cd60608301856132d7565b6138da60808301846132d7565b9695505050505050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613940602183613061565b915061394b826138e4565b604082019050919050565b6000602082019050818103600083015261396f81613933565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b60006139d2603d83613061565b91506139dd82613976565b604082019050919050565b60006020820190508181036000830152613a01816139c5565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613a64602d83613061565b9150613a6f82613a08565b604082019050919050565b60006020820190508181036000830152613a9381613a57565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613af6602b83613061565b9150613b0182613a9a565b604082019050919050565b60006020820190508181036000830152613b2581613ae9565b9050919050565b7f4e46546966793732313a2063616c6c6572206973206e6f74206f776e6572206e60008201527f6f7220617070726f766564000000000000000000000000000000000000000000602082015250565b6000613b88602b83613061565b9150613b9382613b2c565b604082019050919050565b60006020820190508181036000830152613bb781613b7b565b9050919050565b7f455243373231576974685065726d69743a207065726d697420646561646c696e60008201527f6520657870697265640000000000000000000000000000000000000000000000602082015250565b6000613c1a602983613061565b9150613c2582613bbe565b604082019050919050565b60006020820190508181036000830152613c4981613c0d565b9050919050565b7f455243373231576974685065726d69743a20696e76616c6964207065726d697460008201527f207369676e617475726500000000000000000000000000000000000000000000602082015250565b6000613cac602a83613061565b9150613cb782613c50565b604082019050919050565b60006020820190508181036000830152613cdb81613c9f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d1c8261316f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d4f57613d4e613ce2565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613db6602c83613061565b9150613dc182613d5a565b604082019050919050565b60006020820190508181036000830152613de581613da9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613e51601883613061565b9150613e5c82613e1b565b602082019050919050565b60006020820190508181036000830152613e8081613e44565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613ee3602983613061565b9150613eee82613e87565b604082019050919050565b60006020820190508181036000830152613f1281613ed6565b9050919050565b7f4e46546966793732313a206f6e6c79206f776e6572206f7220636f6e74726f6c60008201527f6c65720000000000000000000000000000000000000000000000000000000000602082015250565b6000613f75602383613061565b9150613f8082613f19565b604082019050919050565b60006020820190508181036000830152613fa481613f68565b9050919050565b6000613fb68261316f565b9150613fc18361316f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ff657613ff5613ce2565b5b828201905092915050565b600081905092915050565b600061401782613056565b6140218185614001565b9350614031818560208601613072565b80840191505092915050565b6000614049828561400c565b9150614055828461400c565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140bd602683613061565b91506140c882614061565b604082019050919050565b600060208201905081810360008301526140ec816140b0565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061414f602583613061565b915061415a826140f3565b604082019050919050565b6000602082019050818103600083015261417e81614142565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141e1602483613061565b91506141ec82614185565b604082019050919050565b60006020820190508181036000830152614210816141d4565b9050919050565b600060a08201905061422c6000830188613216565b6142396020830187613216565b6142466040830186613216565b61425360608301856132d7565b614260608083018461326d565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142a0602083613061565b91506142ab8261426a565b602082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b6142df81613354565b82525050565b60006080820190506142fa6000830187613216565b61430760208301866142d6565b6143146040830185613216565b6143216060830184613216565b95945050505050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614360601983613061565b915061436b8261432a565b602082019050919050565b6000602082019050818103600083015261438f81614353565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006143f2603283613061565b91506143fd82614396565b604082019050919050565b60006020820190508181036000830152614421816143e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e46546966793732313a20746f6b656e207472616e73666572207768696c652060008201527f7061757365640000000000000000000000000000000000000000000000000000602082015250565b60006144b3602683613061565b91506144be82614457565b604082019050919050565b600060208201905081810360008301526144e2816144a6565b9050919050565b7f4e46546966793732313a20746f6b656e206973206c6f636b6564000000000000600082015250565b600061451f601a83613061565b915061452a826144e9565b602082019050919050565b6000602082019050818103600083015261454e81614512565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061458b601483613061565b915061459682614555565b602082019050919050565b600060208201905081810360008301526145ba8161457e565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006145f7601083613061565b9150614602826145c1565b602082019050919050565b60006020820190508181036000830152614626816145ea565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614663602083613061565b915061466e8261462d565b602082019050919050565b6000602082019050818103600083015261469281614656565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006146cf601c83613061565b91506146da82614699565b602082019050919050565b600060208201905081810360008301526146fe816146c2565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061472c82614705565b6147368185614710565b9350614746818560208601613072565b61474f816130a5565b840191505092915050565b600060808201905061476f600083018761326d565b61477c602083018661326d565b61478960408301856132d7565b818103606083015261479b8184614721565b905095945050505050565b6000815190506147b581612fc7565b92915050565b6000602082840312156147d1576147d0612f91565b5b60006147df848285016147a6565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000614844603583613061565b915061484f826147e8565b604082019050919050565b6000602082019050818103600083015261487381614837565b9050919050565b60006148858261316f565b91506148908361316f565b9250828210156148a3576148a2613ce2565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212202ef41e29086673e00fd6aa6ea86255cbe7a897190a0826fb0192fe86fca4cea164736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000058a3462d7f6cfcd2e3b85ac4e86d0362db0ab2cd0000000000000000000000000000000000000000000000000000000000000e1000000000000000000000000000000000000000000000000000000000000000064672756974730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000646727569747300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000