60806040526107d0600955612710600a5567011c37937e080000600b5566b1a2bc2ec50000600c5566b1a2bc2ec50000600d556000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff02191690831515021790555060006012556000601355600060145560006015553480156200008957600080fd5b50604051620055a4380380620055a48339818101604052810190620000af919062000617565b6040518060400160405280600781526020017f42414444494553000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f424144000000000000000000000000000000000000000000000000000000000081525081600290805190602001906200013392919062000550565b5080600390805190602001906200014c92919062000550565b506200015d620001c660201b60201c565b60008190555050506200018562000179620001cf60201b60201c565b620001d760201b60201c565b6000600860146101000a81548160ff02191690831515021790555081600f8190555080601081905550620001be6200029d60201b60201c565b5050620008b5565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002ad620002eb60201b60201c565b620002bd6200037c60201b60201c565b620002d857620002d26200039360201b60201c565b620002e9565b620002e86200040860201b60201c565b5b565b620002fb620001cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003216200047d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200037a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003719062000745565b60405180910390fd5b565b6000600860149054906101000a900460ff16905090565b620003a3620004a760201b60201c565b6001600860146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620003ef620001cf60201b60201c565b604051620003fe9190620006e4565b60405180910390a1565b62000418620004fc60201b60201c565b6000600860146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa62000464620001cf60201b60201c565b604051620004739190620006e4565b60405180910390a1565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004b76200037c60201b60201c565b15620004fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004f19062000723565b60405180910390fd5b565b6200050c6200037c60201b60201c565b6200054e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005459062000701565b60405180910390fd5b565b8280546200055e90620007b6565b90600052602060002090601f016020900481019282620005825760008555620005ce565b82601f106200059d57805160ff1916838001178555620005ce565b82800160010185558215620005ce579182015b82811115620005cd578251825591602001919060010190620005b0565b5b509050620005dd9190620005e1565b5090565b5b80821115620005fc576000816000905550600101620005e2565b5090565b60008151905062000611816200089b565b92915050565b600080604083850312156200063157620006306200081b565b5b6000620006418582860162000600565b9250506020620006548582860162000600565b9150509250929050565b620006698162000778565b82525050565b60006200067e60148362000767565b91506200068b8262000820565b602082019050919050565b6000620006a560108362000767565b9150620006b28262000849565b602082019050919050565b6000620006cc60208362000767565b9150620006d98262000872565b602082019050919050565b6000602082019050620006fb60008301846200065e565b92915050565b600060208201905081810360008301526200071c816200066f565b9050919050565b600060208201905081810360008301526200073e8162000696565b9050919050565b600060208201905081810360008301526200076081620006bd565b9050919050565b600082825260208201905092915050565b6000620007858262000796565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006002820490506001821680620007cf57607f821691505b60208210811415620007e657620007e5620007ec565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620008a6816200078c565b8114620008b257600080fd5b50565b614cdf80620008c56000396000f3fe6080604052600436106103355760003560e01c8063715018a6116101ab578063b1edcb07116100f7578063cd2248bc11610095578063f2fde38b1161006f578063f2fde38b14610bc1578063f6a5b8e614610bea578063faa95a8e14610c13578063fd1fc4a014610c3c57610335565b8063cd2248bc14610b1e578063e985e9c514610b5b578063f103b43314610b9857610335565b8063c23dc68f116100d1578063c23dc68f14610a4e578063c7f8d01a14610a8b578063c87b56dd14610ab6578063cce132d114610af357610335565b8063b1edcb07146109de578063b7acfe8614610a07578063b88d4fde14610a3257610335565b80638da5cb5b1161016457806399a2557a1161013e57806399a2557a14610931578063a035b1fe1461096e578063a0712d6814610999578063a22cb465146109b557610335565b80638da5cb5b146108b257806391b7f5ed146108dd57806395d89b411461090657610335565b8063715018a6146107c357806373be8f92146107da5780637d427b1e146108055780637ff9871d1461082e57806382c309871461084a5780638462151c1461087557610335565b80633711b23f11610285578063547520fe116102235780635c975abb116101fd5780635c975abb146106f35780636352211e1461071e5780636c0360eb1461075b57806370a082311461078657610335565b8063547520fe1461066457806355f804b31461068d5780635bbb2177146106b657610335565b80634238090b1161025f5780634238090b146105c957806342842e0e146105f257806346aa52ce1461060e57806348575bfa1461063957610335565b80633711b23f1461055e578063378fe582146105895780633ccfd60b146105b257610335565b806318160ddd116102f25780632174a68f116102cc5780632174a68f146104d557806323b872dd14610500578063274a32d31461051c57806332cb6b0c1461053357610335565b806318160ddd146104545780631a62dae41461047f578063213f16f3146104aa57610335565b806301ffc9a71461033a578063024577fe14610377578063061431a8146103b457806306fdde03146103d0578063081812fc146103fb578063095ea7b314610438575b600080fd5b34801561034657600080fd5b50610361600480360381019061035c91906138a0565b610c65565b60405161036e919061402a565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906137ac565b610cf7565b6040516103ab919061402a565b60405180910390f35b6103ce60048036038101906103c99190613970565b610d7a565b005b3480156103dc57600080fd5b506103e5610fb0565b6040516103f29190614060565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190613943565b611042565b60405161042f9190613f7f565b60405180910390f35b610452600480360381019061044d91906136b9565b6110c1565b005b34801561046057600080fd5b50610469611205565b60405161047691906142fd565b60405180910390f35b34801561048b57600080fd5b5061049461121c565b6040516104a191906142fd565b60405180910390f35b3480156104b657600080fd5b506104bf611222565b6040516104cc91906142fd565b60405180910390f35b3480156104e157600080fd5b506104ea611228565b6040516104f7919061402a565b60405180910390f35b61051a600480360381019061051591906135a3565b61123b565b005b34801561052857600080fd5b50610531611560565b005b34801561053f57600080fd5b5061054861158c565b60405161055591906142fd565b60405180910390f35b34801561056a57600080fd5b50610573611592565b60405161058091906142fd565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190613943565b611598565b005b3480156105be57600080fd5b506105c76115aa565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190613873565b611644565b005b61060c600480360381019061060791906135a3565b611656565b005b34801561061a57600080fd5b50610623611676565b60405161063091906142fd565b60405180910390f35b34801561064557600080fd5b5061064e61167c565b60405161065b919061402a565b60405180910390f35b34801561067057600080fd5b5061068b60048036038101906106869190613943565b61168f565b005b34801561069957600080fd5b506106b460048036038101906106af91906138fa565b6116a1565b005b3480156106c257600080fd5b506106dd60048036038101906106d891906137f9565b6116c3565b6040516106ea9190613fe6565b60405180910390f35b3480156106ff57600080fd5b50610708611786565b604051610715919061402a565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190613943565b61179d565b6040516107529190613f7f565b60405180910390f35b34801561076757600080fd5b506107706117af565b60405161077d9190614060565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190613536565b61183d565b6040516107ba91906142fd565b60405180910390f35b3480156107cf57600080fd5b506107d86118f6565b005b3480156107e657600080fd5b506107ef61190a565b6040516107fc91906142fd565b60405180910390f35b34801561081157600080fd5b5061082c60048036038101906108279190613873565b611910565b005b61084860048036038101906108439190613970565b611922565b005b34801561085657600080fd5b5061085f611b58565b60405161086c9190614045565b60405180910390f35b34801561088157600080fd5b5061089c60048036038101906108979190613536565b611b5e565b6040516108a99190614008565b60405180910390f35b3480156108be57600080fd5b506108c7611ca8565b6040516108d49190613f7f565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff9190613943565b611cd2565b005b34801561091257600080fd5b5061091b611ce4565b6040516109289190614060565b60405180910390f35b34801561093d57600080fd5b50610958600480360381019061095391906136f9565b611d76565b6040516109659190614008565b60405180910390f35b34801561097a57600080fd5b50610983611f8a565b60405161099091906142fd565b60405180910390f35b6109b360048036038101906109ae9190613943565b611f90565b005b3480156109c157600080fd5b506109dc60048036038101906109d79190613679565b6120bd565b005b3480156109ea57600080fd5b50610a056004803603810190610a009190613846565b6121c8565b005b348015610a1357600080fd5b50610a1c6121ed565b604051610a299190614045565b60405180910390f35b610a4c6004803603810190610a4791906135f6565b6121f3565b005b348015610a5a57600080fd5b50610a756004803603810190610a709190613943565b612266565b604051610a8291906142e2565b60405180910390f35b348015610a9757600080fd5b50610aa06122d0565b604051610aad91906142fd565b60405180910390f35b348015610ac257600080fd5b50610add6004803603810190610ad89190613943565b6122d6565b604051610aea9190614060565b60405180910390f35b348015610aff57600080fd5b50610b08612375565b604051610b1591906142fd565b60405180910390f35b348015610b2a57600080fd5b50610b456004803603810190610b4091906137ac565b61237b565b604051610b52919061402a565b60405180910390f35b348015610b6757600080fd5b50610b826004803603810190610b7d9190613563565b6123fe565b604051610b8f919061402a565b60405180910390f35b348015610ba457600080fd5b50610bbf6004803603810190610bba9190613943565b612492565b005b348015610bcd57600080fd5b50610be86004803603810190610be39190613536565b6124a4565b005b348015610bf657600080fd5b50610c116004803603810190610c0c9190613943565b612528565b005b348015610c1f57600080fd5b50610c3a6004803603810190610c359190613846565b61253a565b005b348015610c4857600080fd5b50610c636004803603810190610c5e919061374c565b61255f565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cc057506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610cf05750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60008033604051602001610d0b9190613f40565b604051602081830303815290604052805190602001209050610d71848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506010548361264b565b91505092915050565b60011515600e60009054906101000a900460ff16151514610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790614182565b60405180910390fd5b600954610ddc33612662565b84610de79190614454565b1115610e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1f90614102565b60405180910390fd5b600a5483610e34611205565b610e3e9190614454565b1115610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7690614082565b60405180910390fd5b82600c54610e8d91906144aa565b341015610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec690614222565b60405180910390fd5b600033604051602001610ee29190613f40565b604051602081830303815290604052805190602001209050610f48838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506010548361264b565b610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e906142c2565b60405180910390fd5b8360136000828254610f999190614454565b92505081905550610faa33856126b9565b50505050565b606060028054610fbf906145e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610feb906145e7565b80156110385780601f1061100d57610100808354040283529160200191611038565b820191906000526020600020905b81548152906001019060200180831161101b57829003601f168201915b5050505050905090565b600061104d826126d7565b611083576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006110cc8261179d565b90508073ffffffffffffffffffffffffffffffffffffffff166110ed612736565b73ffffffffffffffffffffffffffffffffffffffff16146111505761111981611114612736565b6123fe565b61114f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061120f61273e565b6001546000540303905090565b60135481565b60145481565b600e60019054906101000a900460ff1681565b600061124682612747565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112ad576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806112b984612815565b915091506112cf81876112ca612736565b61283c565b61131b576112e4866112df612736565b6123fe565b61131a576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611382576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61138f8686866001612880565b801561139a57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061146885611444888887612886565b7c0200000000000000000000000000000000000000000000000000000000176128ae565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841614156114f05760006001850190506000600460008381526020019081526020016000205414156114ee5760005481146114ed578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461155886868660016128d9565b505050505050565b6115686128df565b611570611786565b6115815761157c61295d565b61158a565b6115896129c0565b5b565b600a5481565b600d5481565b6115a06128df565b80600d8190555050565b6115b26128df565b600047116115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90614262565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611640573d6000803e3d6000fd5b5050565b61164c6128df565b80600f8190555050565b611671838383604051806020016040528060008152506121f3565b505050565b60125481565b600e60009054906101000a900460ff1681565b6116976128df565b8060098190555050565b6116a96128df565b80601190805190602001906116bf9291906131e4565b5050565b6060600083839050905060008167ffffffffffffffff8111156116e9576116e8614744565b5b60405190808252806020026020018201604052801561172257816020015b61170f61326a565b8152602001906001900390816117075790505b50905060005b82811461177a5761175186868381811061174557611744614715565b5b90506020020135612266565b82828151811061176457611763614715565b5b6020026020010181905250806001019050611728565b50809250505092915050565b6000600860149054906101000a900460ff16905090565b60006117a882612747565b9050919050565b601180546117bc906145e7565b80601f01602080910402602001604051908101604052809291908181526020018280546117e8906145e7565b80156118355780601f1061180a57610100808354040283529160200191611835565b820191906000526020600020905b81548152906001019060200180831161181857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a5576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6118fe6128df565b6119086000612a23565b565b60155481565b6119186128df565b8060108190555050565b60011515600e60019054906101000a900460ff16151514611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f90614142565b60405180910390fd5b60095461198433612662565b8461198f9190614454565b11156119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c790614242565b60405180910390fd5b600a54836119dc611205565b6119e69190614454565b1115611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e906140c2565b60405180910390fd5b82600d54611a3591906144aa565b341015611a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6e906142a2565b60405180910390fd5b600033604051602001611a8a9190613f40565b604051602081830303815290604052805190602001209050611af0838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f548361264b565b611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2690614282565b60405180910390fd5b8360146000828254611b419190614454565b92505081905550611b5233856126b9565b50505050565b60105481565b60606000806000611b6e8561183d565b905060008167ffffffffffffffff811115611b8c57611b8b614744565b5b604051908082528060200260200182016040528015611bba5781602001602082028036833780820191505090505b509050611bc561326a565b6000611bcf61273e565b90505b838614611c9a57611be281612ae9565b9150816040015115611bf357611c8f565b600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611c3357816000015194505b8773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611c8e5780838780600101985081518110611c8157611c80614715565b5b6020026020010181815250505b5b806001019050611bd2565b508195505050505050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611cda6128df565b80600b8190555050565b606060038054611cf3906145e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1f906145e7565b8015611d6c5780601f10611d4157610100808354040283529160200191611d6c565b820191906000526020600020905b815481529060010190602001808311611d4f57829003601f168201915b5050505050905090565b6060818310611db1576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611dbc612b14565b9050611dc661273e565b851015611dd857611dd561273e565b94505b80841115611de4578093505b6000611def8761183d565b905084861015611e12576000868603905081811015611e0c578091505b50611e17565b600090505b60008167ffffffffffffffff811115611e3357611e32614744565b5b604051908082528060200260200182016040528015611e615781602001602082028036833780820191505090505b5090506000821415611e795780945050505050611f83565b6000611e8488612266565b905060008160400151611e9957816000015190505b60008990505b888114158015611eaf5750848714155b15611f7557611ebd81612ae9565b9250826040015115611ece57611f6a565b600073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff1614611f0e57826000015191505b8a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f695780848880600101995081518110611f5c57611f5b614715565b5b6020026020010181815250505b5b806001019050611e9f565b508583528296505050505050505b9392505050565b600b5481565b611f98612b1d565b600954611fa433612662565b82611faf9190614454565b1115611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790614162565b60405180910390fd5b600a5481611ffc611205565b6120069190614454565b1115612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e906141c2565b60405180910390fd5b80600b5461205591906144aa565b341015612097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208e90614122565b60405180910390fd5b80601260008282546120a99190614454565b925050819055506120ba33826126b9565b50565b80600760006120ca612736565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612177612736565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121bc919061402a565b60405180910390a35050565b6121d06128df565b80600e60016101000a81548160ff02191690831515021790555050565b600f5481565b6121fe84848461123b565b60008373ffffffffffffffffffffffffffffffffffffffff163b146122605761222984848484612b67565b61225f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b61226e61326a565b61227661326a565b61227e61273e565b831080612292575061228e612b14565b8310155b156122a057809150506122cb565b6122a983612ae9565b90508060400151156122be57809150506122cb565b6122c783612cc7565b9150505b919050565b600c5481565b60606122e1826126d7565b612317576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612321612ce7565b9050600081511415612342576040518060200160405280600081525061236d565b8061234c84612d79565b60405160200161235d929190613f5b565b6040516020818303038152906040525b915050919050565b60095481565b6000803360405160200161238f9190613f40565b6040516020818303038152906040528051906020012090506123f5848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f548361264b565b91505092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61249a6128df565b80600a8190555050565b6124ac6128df565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561251c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612513906140e2565b60405180910390fd5b61252581612a23565b50565b6125306128df565b80600c8190555050565b6125426128df565b80600e60006101000a81548160ff02191690831515021790555050565b6125676128df565b6000838390509050600a54818361257e91906144aa565b612586611205565b6125909190614454565b11156125d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c8906141e2565b60405180910390fd5b80826125dd91906144aa565b601560008282546125ee9190614454565b9250508190555060005b818110156126445761263185858381811061261657612615614715565b5b905060200201602081019061262b9190613536565b846126b9565b808061263c9061464a565b9150506125f8565b5050505050565b6000826126588584612dd2565b1490509392505050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b6126d3828260405180602001604052806000815250612e28565b5050565b6000816126e261273e565b111580156126f1575060005482105b801561272f575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b60006001905090565b6000808290508061275661273e565b116127de576000548110156127dd5760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821614156127db575b60008114156127d15760046000836001900393508381526020019081526020016000205490506127a6565b8092505050612810565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861289d868684612ec5565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6128e7612ece565b73ffffffffffffffffffffffffffffffffffffffff16612905611ca8565b73ffffffffffffffffffffffffffffffffffffffff161461295b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295290614202565b60405180910390fd5b565b612965612b1d565b6001600860146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586129a9612ece565b6040516129b69190613f7f565b60405180910390a1565b6129c8612ed6565b6000600860146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612a0c612ece565b604051612a199190613f7f565b60405180910390a1565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612af161326a565b612b0d6004600084815260200190815260200160002054612f1f565b9050919050565b60008054905090565b612b25611786565b15612b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5c906141a2565b60405180910390fd5b565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b8d612736565b8786866040518563ffffffff1660e01b8152600401612baf9493929190613f9a565b602060405180830381600087803b158015612bc957600080fd5b505af1925050508015612bfa57506040513d601f19601f82011682018060405250810190612bf791906138cd565b60015b612c74573d8060008114612c2a576040519150601f19603f3d011682016040523d82523d6000602084013e612c2f565b606091505b50600081511415612c6c576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b612ccf61326a565b612ce0612cdb83612747565b612f1f565b9050919050565b606060118054612cf6906145e7565b80601f0160208091040260200160405190810160405280929190818152602001828054612d22906145e7565b8015612d6f5780601f10612d4457610100808354040283529160200191612d6f565b820191906000526020600020905b815481529060010190602001808311612d5257829003601f168201915b5050505050905090565b606060a060405101806040526020810391506000825281835b600115612dbd57600184039350600a81066030018453600a8104905080612db857612dbd565b612d92565b50828103602084039350808452505050919050565b60008082905060005b8451811015612e1d57612e0882868381518110612dfb57612dfa614715565b5b6020026020010151612fd5565b91508080612e159061464a565b915050612ddb565b508091505092915050565b612e328383613000565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612ec057600080549050600083820390505b612e726000868380600101945086612b67565b612ea8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612e5f578160005414612ebd57600080fd5b50505b505050565b60009392505050565b600033905090565b612ede611786565b612f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f14906140a2565b60405180910390fd5b565b612f2761326a565b81816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060a082901c816020019067ffffffffffffffff16908167ffffffffffffffff168152505060007c01000000000000000000000000000000000000000000000000000000008316141581604001901515908115158152505060e882901c816060019062ffffff16908162ffffff1681525050919050565b6000818310612fed57612fe882846131bd565b612ff8565b612ff783836131bd565b5b905092915050565b6000805490506000821415613041576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61304e6000848385612880565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506130c5836130b66000866000612886565b6130bf856131d4565b176128ae565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461316657808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460018101905061312b565b5060008214156131a2576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506131b860008483856128d9565b505050565b600082600052816020526040600020905092915050565b60006001821460e11b9050919050565b8280546131f0906145e7565b90600052602060002090601f0160209004810192826132125760008555613259565b82601f1061322b57805160ff1916838001178555613259565b82800160010185558215613259579182015b8281111561325857825182559160200191906001019061323d565b5b50905061326691906132b9565b5090565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff168152602001600015158152602001600062ffffff1681525090565b5b808211156132d25760008160009055506001016132ba565b5090565b60006132e96132e48461433d565b614318565b90508281526020810184848401111561330557613304614782565b5b6133108482856145a5565b509392505050565b600061332b6133268461436e565b614318565b90508281526020810184848401111561334757613346614782565b5b6133528482856145a5565b509392505050565b60008135905061336981614c36565b92915050565b60008083601f84011261338557613384614778565b5b8235905067ffffffffffffffff8111156133a2576133a1614773565b5b6020830191508360208202830111156133be576133bd61477d565b5b9250929050565b60008083601f8401126133db576133da614778565b5b8235905067ffffffffffffffff8111156133f8576133f7614773565b5b6020830191508360208202830111156134145761341361477d565b5b9250929050565b60008083601f84011261343157613430614778565b5b8235905067ffffffffffffffff81111561344e5761344d614773565b5b60208301915083602082028301111561346a5761346961477d565b5b9250929050565b60008135905061348081614c4d565b92915050565b60008135905061349581614c64565b92915050565b6000813590506134aa81614c7b565b92915050565b6000815190506134bf81614c7b565b92915050565b600082601f8301126134da576134d9614778565b5b81356134ea8482602086016132d6565b91505092915050565b600082601f83011261350857613507614778565b5b8135613518848260208601613318565b91505092915050565b60008135905061353081614c92565b92915050565b60006020828403121561354c5761354b61478c565b5b600061355a8482850161335a565b91505092915050565b6000806040838503121561357a5761357961478c565b5b60006135888582860161335a565b92505060206135998582860161335a565b9150509250929050565b6000806000606084860312156135bc576135bb61478c565b5b60006135ca8682870161335a565b93505060206135db8682870161335a565b92505060406135ec86828701613521565b9150509250925092565b600080600080608085870312156136105761360f61478c565b5b600061361e8782880161335a565b945050602061362f8782880161335a565b935050604061364087828801613521565b925050606085013567ffffffffffffffff81111561366157613660614787565b5b61366d878288016134c5565b91505092959194509250565b600080604083850312156136905761368f61478c565b5b600061369e8582860161335a565b92505060206136af85828601613471565b9150509250929050565b600080604083850312156136d0576136cf61478c565b5b60006136de8582860161335a565b92505060206136ef85828601613521565b9150509250929050565b6000806000606084860312156137125761371161478c565b5b60006137208682870161335a565b935050602061373186828701613521565b925050604061374286828701613521565b9150509250925092565b6000806000604084860312156137655761376461478c565b5b600084013567ffffffffffffffff81111561378357613782614787565b5b61378f8682870161336f565b935093505060206137a286828701613521565b9150509250925092565b600080602083850312156137c3576137c261478c565b5b600083013567ffffffffffffffff8111156137e1576137e0614787565b5b6137ed858286016133c5565b92509250509250929050565b600080602083850312156138105761380f61478c565b5b600083013567ffffffffffffffff81111561382e5761382d614787565b5b61383a8582860161341b565b92509250509250929050565b60006020828403121561385c5761385b61478c565b5b600061386a84828501613471565b91505092915050565b6000602082840312156138895761388861478c565b5b600061389784828501613486565b91505092915050565b6000602082840312156138b6576138b561478c565b5b60006138c48482850161349b565b91505092915050565b6000602082840312156138e3576138e261478c565b5b60006138f1848285016134b0565b91505092915050565b6000602082840312156139105761390f61478c565b5b600082013567ffffffffffffffff81111561392e5761392d614787565b5b61393a848285016134f3565b91505092915050565b6000602082840312156139595761395861478c565b5b600061396784828501613521565b91505092915050565b6000806000604084860312156139895761398861478c565b5b600061399786828701613521565b935050602084013567ffffffffffffffff8111156139b8576139b7614787565b5b6139c4868287016133c5565b92509250509250925092565b60006139dc8383613e5a565b60808301905092915050565b60006139f48383613f13565b60208301905092915050565b613a0981614504565b82525050565b613a1881614504565b82525050565b613a2f613a2a82614504565b614693565b82525050565b6000613a40826143bf565b613a4a8185614405565b9350613a558361439f565b8060005b83811015613a86578151613a6d88826139d0565b9750613a78836143eb565b925050600181019050613a59565b5085935050505092915050565b6000613a9e826143ca565b613aa88185614416565b9350613ab3836143af565b8060005b83811015613ae4578151613acb88826139e8565b9750613ad6836143f8565b925050600181019050613ab7565b5085935050505092915050565b613afa81614516565b82525050565b613b0981614516565b82525050565b613b1881614522565b82525050565b6000613b29826143d5565b613b338185614427565b9350613b438185602086016145b4565b613b4c81614791565b840191505092915050565b6000613b62826143e0565b613b6c8185614438565b9350613b7c8185602086016145b4565b613b8581614791565b840191505092915050565b6000613b9b826143e0565b613ba58185614449565b9350613bb58185602086016145b4565b80840191505092915050565b6000613bce602583614438565b9150613bd9826147af565b604082019050919050565b6000613bf1601483614438565b9150613bfc826147fe565b602082019050919050565b6000613c14601f83614438565b9150613c1f82614827565b602082019050919050565b6000613c37602683614438565b9150613c4282614850565b604082019050919050565b6000613c5a602c83614438565b9150613c658261489f565b604082019050919050565b6000613c7d601b83614438565b9150613c88826148ee565b602082019050919050565b6000613ca0601f83614438565b9150613cab82614917565b602082019050919050565b6000613cc3602383614438565b9150613cce82614940565b604082019050919050565b6000613ce6601d83614438565b9150613cf18261498f565b602082019050919050565b6000613d09601083614438565b9150613d14826149b8565b602082019050919050565b6000613d2c601c83614438565b9150613d37826149e1565b602082019050919050565b6000613d4f602583614438565b9150613d5a82614a0a565b604082019050919050565b6000613d72602083614438565b9150613d7d82614a59565b602082019050919050565b6000613d95602483614438565b9150613da082614a82565b604082019050919050565b6000613db8602683614438565b9150613dc382614ad1565b604082019050919050565b6000613ddb603183614438565b9150613de682614b20565b604082019050919050565b6000613dfe602483614438565b9150613e0982614b6f565b604082019050919050565b6000613e21601e83614438565b9150613e2c82614bbe565b602082019050919050565b6000613e44602a83614438565b9150613e4f82614be7565b604082019050919050565b608082016000820151613e706000850182613a00565b506020820151613e836020850182613f31565b506040820151613e966040850182613af1565b506060820151613ea96060850182613f04565b50505050565b608082016000820151613ec56000850182613a00565b506020820151613ed86020850182613f31565b506040820151613eeb6040850182613af1565b506060820151613efe6060850182613f04565b50505050565b613f0d81614578565b82525050565b613f1c81614587565b82525050565b613f2b81614587565b82525050565b613f3a81614591565b82525050565b6000613f4c8284613a1e565b60148201915081905092915050565b6000613f678285613b90565b9150613f738284613b90565b91508190509392505050565b6000602082019050613f946000830184613a0f565b92915050565b6000608082019050613faf6000830187613a0f565b613fbc6020830186613a0f565b613fc96040830185613f22565b8181036060830152613fdb8184613b1e565b905095945050505050565b600060208201905081810360008301526140008184613a35565b905092915050565b600060208201905081810360008301526140228184613a93565b905092915050565b600060208201905061403f6000830184613b00565b92915050565b600060208201905061405a6000830184613b0f565b92915050565b6000602082019050818103600083015261407a8184613b57565b905092915050565b6000602082019050818103600083015261409b81613bc1565b9050919050565b600060208201905081810360008301526140bb81613be4565b9050919050565b600060208201905081810360008301526140db81613c07565b9050919050565b600060208201905081810360008301526140fb81613c2a565b9050919050565b6000602082019050818103600083015261411b81613c4d565b9050919050565b6000602082019050818103600083015261413b81613c70565b9050919050565b6000602082019050818103600083015261415b81613c93565b9050919050565b6000602082019050818103600083015261417b81613cb6565b9050919050565b6000602082019050818103600083015261419b81613cd9565b9050919050565b600060208201905081810360008301526141bb81613cfc565b9050919050565b600060208201905081810360008301526141db81613d1f565b9050919050565b600060208201905081810360008301526141fb81613d42565b9050919050565b6000602082019050818103600083015261421b81613d65565b9050919050565b6000602082019050818103600083015261423b81613d88565b9050919050565b6000602082019050818103600083015261425b81613dab565b9050919050565b6000602082019050818103600083015261427b81613dce565b9050919050565b6000602082019050818103600083015261429b81613df1565b9050919050565b600060208201905081810360008301526142bb81613e14565b9050919050565b600060208201905081810360008301526142db81613e37565b9050919050565b60006080820190506142f76000830184613eaf565b92915050565b60006020820190506143126000830184613f22565b92915050565b6000614322614333565b905061432e8282614619565b919050565b6000604051905090565b600067ffffffffffffffff82111561435857614357614744565b5b61436182614791565b9050602081019050919050565b600067ffffffffffffffff82111561438957614388614744565b5b61439282614791565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061445f82614587565b915061446a83614587565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561449f5761449e6146b7565b5b828201905092915050565b60006144b582614587565b91506144c083614587565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144f9576144f86146b7565b5b828202905092915050565b600061450f82614558565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156145d25780820151818401526020810190506145b7565b838111156145e1576000848401525b50505050565b600060028204905060018216806145ff57607f821691505b60208210811415614613576146126146e6565b5b50919050565b61462282614791565b810181811067ffffffffffffffff8211171561464157614640614744565b5b80604052505050565b600061465582614587565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614688576146876146b7565b5b600182019050919050565b600061469e826146a5565b9050919050565b60006146b0826147a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f6d696e7457686974656c6973743a204e6f7420656e6f75676820746f6b656e7360008201527f206c656674000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f6d696e745649503a204e6f7420656e6f75676820746f6b656e73206c65667400600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6d696e7457686974656c6973743a20457863656564656420746865206c696d6960008201527f74207065722077616c6c65740000000000000000000000000000000000000000602082015250565b7f6d696e743a204e6f7420656e6f7567682065746865722073656e740000000000600082015250565b7f6d696e745649503a20564950206d696e74206973206e6f742061637469766500600082015250565b7f6d696e743a20457863656564656420746865206c696d6974207065722077616c60008201527f6c65740000000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74574c3a20574c206d696e74206973206e6f7420616374697665000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f6d696e743a204e6f7420656e6f75676820746f6b656e73206c65667400000000600082015250565b7f61697244726f703a204e6f7420656e6f75676820746f6b656e7320746f20616960008201527f7264726f70000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6d696e7457686974656c6973743a204e6f7420656e6f7567682065746865722060008201527f73656e7400000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e745649503a20457863656564656420746865206c696d6974207065722060008201527f77616c6c65740000000000000000000000000000000000000000000000000000602082015250565b7f77697468647261773a20636f6e74726163742062616c616e6365206d7573742060008201527f62652067726561746572207468616e2030000000000000000000000000000000602082015250565b7f6d696e745649503a2061646472657373206973206e6f74206f6e20776869746560008201527f6c69737400000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e745649503a204e6f7420656e6f7567682065746865722073656e740000600082015250565b7f6d696e7457686974656c6973743a2061646472657373206973206e6f74206f6e60008201527f2077686974656c69737400000000000000000000000000000000000000000000602082015250565b614c3f81614504565b8114614c4a57600080fd5b50565b614c5681614516565b8114614c6157600080fd5b50565b614c6d81614522565b8114614c7857600080fd5b50565b614c848161452c565b8114614c8f57600080fd5b50565b614c9b81614587565b8114614ca657600080fd5b5056fea2646970667358221220f3d0c404c500e0e0de6b900839b5d965f60faa31f29889490e6eda6d6427569964736f6c63430008070033343096fde1ee2813700844cbbb323eebda7f439a590eff0cabe1895d8f37da7b343096fde1ee2813700844cbbb323eebda7f439a590eff0cabe1895d8f37da7b