60a06040523480156200001157600080fd5b506040516200597d3803806200597d833981016040819052620000349162000046565b6001600160a01b031660805262000078565b6000602082840312156200005957600080fd5b81516001600160a01b03811681146200007157600080fd5b9392505050565b6080516158db620000a2600039600081816112ca01528181611592015261189401526158db6000f3fe6080604052600436106101285760003560e01c8063ac9650d8116100a5578063e53dec3811610074578063f242432a11610059578063f242432a146104b5578063fa461e33146104d5578063fdf90cc1146104f557600080fd5b8063e53dec38146103dc578063e985e9c51461047a57600080fd5b8063ac9650d814610320578063c035e24214610340578063caa9a08d14610360578063d3487997146103bc57600080fd5b80633cc3c1da116100fc578063a22cb465116100e1578063a22cb4651461027b578063a350438a1461029b578063a734bda8146102e657600080fd5b80633cc3c1da146102055780634e1273f41461024e57600080fd5b8062fdd58e1461012d57806301ffc9a714610175578063266601a3146101a55780632eb2c2d6146101e3575b600080fd5b34801561013957600080fd5b50610162610148366004614a79565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b34801561018157600080fd5b50610195610190366004614ad3565b610515565b604051901515815260200161016c565b3480156101b157600080fd5b506101c56101c0366004614b1d565b6105ae565b60408051938452602084019290925260020b9082015260600161016c565b3480156101ef57600080fd5b506102036101fe366004614bfe565b610686565b005b34801561021157600080fd5b50610225610220366004614cbd565b6109ef565b604080516fffffffffffffffffffffffffffffffff93841681529290911660208301520161016c565b34801561025a57600080fd5b5061026e610269366004614d41565b610c25565b60405161016c9190614dad565b34801561028757600080fd5b50610203610296366004614dff565b610d33565b3480156102a757600080fd5b506102bb6102b6366004614e38565b610dca565b60408051958652602086019490945292840191909152606083015260020b608082015260a00161016c565b3480156102f257600080fd5b50610306610301366004614e97565b6110b4565b60408051600f93840b81529190920b60208201520161016c565b61033361032e366004614ee1565b61115c565b60405161016c9190614f91565b34801561034c57600080fd5b5061020361035b366004615022565b61126f565b34801561036c57600080fd5b506103a361037b36600461506d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b60405167ffffffffffffffff909116815260200161016c565b3480156103c857600080fd5b506102036103d736600461508a565b61157d565b3480156103e857600080fd5b506101626103f7366004614e97565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b81166020808401919091529690971b9096166034870152604886019390935260e891821b6068860152901b606b8401528051808403604e018152606e909301815282519282019290922060009081526004909152205490565b34801561048657600080fd5b506101956104953660046150d1565b600160209081526000928352604080842090915290825290205460ff1681565b3480156104c157600080fd5b506102036104d03660046150ff565b6115fb565b3480156104e157600080fd5b506102036104f036600461508a565b61187f565b34801561050157600080fd5b506101c5610510366004614b1d565b611904565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806105a857507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008080866105bc81611986565b6105d93389896fffffffffffffffffffffffffffffffff16611a49565b6040516fffffffffffffffffffffffffffffffff88168152889033907f23833bcc608a225445893342669a9bc035de4ef96cc1edd47cead470f1f7817a9060200160405180910390a3610630888888886001611ae7565b9195509350915061067b8167ffffffffffffffff16600090815260036020526040902080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b509450945094915050565b3373ffffffffffffffffffffffffffffffffffffffff891614806106da575073ffffffffffffffffffffffffffffffffffffffff8816600090815260016020908152604080832033845290915290205460ff165b610710576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060005b878110156107d6578888828181106107305761073061517b565b90506020020135925086868281811061074b5761074b61517b565b73ffffffffffffffffffffffffffffffffffffffff8e16600090815260208181526040808320898452825282208054939091029490940135955085939250906107959084906151d9565b909155505073ffffffffffffffffffffffffffffffffffffffff8a166000908152602081815260408083208684529091529020805483019055600101610716565b506108468a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c918291850190849080828437600092019190915250611cf492505050565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b6040516108c09493929190615237565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff89163b156109e3576040517fbc197c81000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff8b169063bc197c81906109479033908f908e908e908e908e908e908e906004016152a7565b6020604051808303816000875af1158015610966573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098a9190615318565b7fffffffff0000000000000000000000000000000000000000000000000000000016146109e3576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b8216602084015288901b1660348201526048810186905260e885811b606883015284901b606b82015260009081908190606e01604051602081830303815290604052805190602001209050600084600114610a8157600082815260066020526040902054610a91565b6000828152600560205260409020545b9050627fffff600287900b1215610c0857600082815260046020526040902054806fffffffffffffffffffffffffffffffff811615610c055760008d81610ada818e8e82611d46565b6040517fab5dbb0400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260028d900b60248201526fffffffffffffffffffffffffffffffff86166044820152606481018290529091506000907313c0fc0268fedaa81719f31a431663a3d906ee6c9063ab5dbb0490608401602060405180830381865af4158015610b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bab9190615335565b600089815260076020526040902054909150610bc8908290611d92565b9350505050600080610bda8584611e3e565b9150915089600114610bf557610bf08682612001565b610bff565b610bff8683612001565b95505050505b50505b809350610c158160801c90565b9250505097509795505050505050565b60608367ffffffffffffffff811115610c4057610c4061534e565b604051908082528060200260200182016040528015610c69578160200160208202803683370190505b50905060005b84811015610d2a57600080878784818110610c8c57610c8c61517b565b9050602002016020810190610ca1919061506d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610cef57610cef61517b565b90506020020135815260200190815260200160002054828281518110610d1757610d1761517b565b6020908102919091010152600101610c6f565b50949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008080808089898067ffffffffffffffff168267ffffffffffffffff1614610f7257610df682611986565b610dff81611986565b6000807b0fff000000000fff000000000fff000000000fffffffffffffffffff808f16908e1603610e3e57610e348e8e61206c565b9092509050610e44565b508c90508b5b610e61338f8e6fffffffffffffffffffffffffffffffff16611a49565b610e7e338e8e6fffffffffffffffffffffffffffffffff16612144565b6040516fffffffffffffffffffffffffffffffff8d1681528d908f9033907f5bf352c233806ba7b9525da6b698c7a4b9a97512b4e222729d857fc7a0c280a29060200160405180910390a4610ed682828e8e8e6122e0565b67ffffffffffffffff8916600090815260036020526040902080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055939c50919a50985096509450610f29915050565b610f6d8167ffffffffffffffff16600090815260036020526040902080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b6110a5565b610f7b82611986565b6000807b0fff000000000fff000000000fff000000000fffffffffffffffffff808f16908e1603610fba57610fb08e8e61206c565b9092509050610fc0565b508c90508b5b610fdd338f8e6fffffffffffffffffffffffffffffffff16611a49565b610ffa338e8e6fffffffffffffffffffffffffffffffff16612144565b6040516fffffffffffffffffffffffffffffffff8d1681528d908f9033907f5bf352c233806ba7b9525da6b698c7a4b9a97512b4e222729d857fc7a0c280a29060200160405180910390a461105282828e8e8e6122e0565b67ffffffffffffffff8916600090815260036020526040902080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055939c50919a509850965094506110a5915050565b50509550955095509550959050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087811b8216602084015286901b1660348201526048810184905260e883811b606883015282901b606b820152600090819081906007908290606e016040516020818303038152906040528051906020012081526020019081526020016000205490506111438190565b925061114f8160801d90565b9150509550959350505050565b60608167ffffffffffffffff8111156111775761117761534e565b6040519080825280602002602001820160405280156111aa57816020015b60608152602001906001900390816111955790505b50905060005b8281101561126857600080308686858181106111ce576111ce61517b565b90506020028101906111e0919061537d565b6040516111ee9291906153e2565b600060405180830381855af49150503d8060008114611229576040519150601f19603f3d011682016040523d82523d6000602084013e61122e565b606091505b50915091508161124057805160208201fd5b808484815181106112535761125361517b565b602090810291909101015250506001016111b0565b5092915050565b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152838116602483015262ffffff831660448301526000917f000000000000000000000000000000000000000000000000000000000000000090911690631698ee8290606401602060405180830381865afa158015611313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133791906153f2565b905073ffffffffffffffffffffffffffffffffffffffff8116611386576040517f4f361fe400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902054156113b75750505050565b67ffffffffffffffff606082901c165b67ffffffffffffffff811660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff161561148e5760408051606087811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529188901b16603483015260e886901b7fffffff00000000000000000000000000000000000000000000000000000000001660488301528251808303602b018152604b909201909252805190820120901c63ffffffff16016113c7565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff8085168083526000602080850182815267ffffffffffffffff881680845260038352878420965187549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093169616959095171790945581815260029093528383207f800000000000000000000000000000000000000000000000000000000000000090920190915591517fcad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f39190a25050505050565b600061158b8284018461545f565b90506115bb7f0000000000000000000000000000000000000000000000000000000000000000826000015161231f565b5084156115d65780515160208201516115d69190338861234f565b83156115f4576115f48160000151602001518260200151338761234f565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff8716148061164f575073ffffffffffffffffffffffffffffffffffffffff8616600090815260016020908152604080832033845290915290205460ff165b611685576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8616600090815260208181526040808320878452909152812080548592906116c39084906151d9565b909155505073ffffffffffffffffffffffffffffffffffffffff85166000908152602081815260408083208784529091529020805484019055611708868686866124c5565b604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b15611877576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff87169063f23a6e61906117db9033908b908a908a908a908a9060040161552b565b6020604051808303816000875af11580156117fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181e9190615318565b7fffffffff000000000000000000000000000000000000000000000000000000001614611877576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b600061188d8284018461545f565b90506118bd7f0000000000000000000000000000000000000000000000000000000000000000826000015161231f565b5060008086136118d2578151602001516118d6565b8151515b905060008087136118e757856118e9565b865b90506118fb828460200151338461234f565b50505050505050565b600080808661191281611986565b61192f3389896fffffffffffffffffffffffffffffffff16612144565b6040516fffffffffffffffffffffffffffffffff88168152889033907f16695fc037c20a8984b20ffc7aadd6ce10e62756f9ca42933a1aa6459ef064ca9060200160405180910390a3610630888888886000611ae7565b67ffffffffffffffff811660009081526003602052604090205474010000000000000000000000000000000000000000900460ff16156119f2576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff16600090815260036020526040902080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290611a879084906151d9565b9091555050604080518381526020810183905260009173ffffffffffffffffffffffffffffffffffffffff86169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b6000806000866fffffffffffffffffffffffffffffffff16600003611b38576040517f337bf85e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8315611b4a57611b47886124d7565b97505b600060036000611b598b6125d5565b67ffffffffffffffff16815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff16905080611bc3576040517f4f361fe400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008660020b8860020b1315611bda575094959460015b6000611be8838c8c8a612913565b90975090955090508015801590611bfc5750815b15611c1a57611c1785611c1185848d8d612a30565b90612f6c565b94505b8273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611c65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c89919061558f565b5093985050505050600289810b9086900b1215905080611caf57508860020b8460020b13155b15611ce6576040517ffd26c92800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050955095509592505050565b60005b82518110156115f457611d3e8585858481518110611d1757611d1761517b565b6020026020010151858581518110611d3157611d3161517b565b6020026020010151612fe8565b600101611cf7565b60007cffffff000000000000000000000000000000000000000000000000000060d084901b166fffffffffffffffffffffffffffffffff8316860160e886901b01015b95945050505050565b600080611d9f8360801d90565b600f0b611dac8560801d90565b600f0b03905080600084600f0b86600f0b03905060008190508383600f0b141580611dda57508181600f0b14155b15611e11576040517fd219017400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e33836fffffffffffffffffffffffffffffffff831687015b9060801b0190565b979650505050505050565b6000806000611e4d8560801c90565b6fffffffffffffffffffffffffffffffff908116915085168082016000808781608082901d9050611ea7611ea2836fffffffffffffffffffffffffffffffff1687680100000000000000000260028a0a613307565b6133d8565b9350611ed7611ea2826fffffffffffffffffffffffffffffffff1687680100000000000000000260028a0a613307565b925060009150819050600487048601611f06611ea26fffffffffffffffffffffffffffffffff87168389613307565b9250611f28611ea2856fffffffffffffffffffffffffffffffff168389613307565b9150611f6c826fffffffffffffffffffffffffffffffff85165b9060801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000160190565b99506000925082915081905060086002890a048887026002880a03019050611fad611ea2866fffffffffffffffffffffffffffffffff168360028a0a613307565b9250611fd2611ea2856fffffffffffffffffffffffffffffffff168360028a0a613307565b9150611ff0826fffffffffffffffffffffffffffffffff8516611f42565b985050505050505050509250929050565b818101828110806120355750826fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff16105b156105a8576040517fd219017400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff821680838318846000805b6004811015612139576120988482603002604c011c90565b60020b1515806120b357506120ad8482613429565b60020b15155b15612131576120c3816030615656565b6120ce90604061566d565b84901c610fff1660001461210e576040517f558d446d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211a86898385613441565b955061212885888385613441565b94508160010191505b600101612080565b505050509250929050565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208684528252808320805486019055805186815291820185905233917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff83163b156122db576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252336004830152600060248301819052604483018590526064830184905260a0608484015260a48301529073ffffffffffffffffffffffffffffffffffffffff85169063f23a6e619060c4016020604051808303816000875af115801561225e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122829190615318565b7fffffffff0000000000000000000000000000000000000000000000000000000016146122db576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008060008060006122f68a8989896001611ae7565b50909550935061230a898989896000611ae7565b969c959b509099509750939550919350505050565b600061232b83836134fc565b90503373ffffffffffffffffffffffffffffffffffffffff8216146105a857600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916123ee9190615680565b6000604051808303816000865af19150503d806000811461242b576040519150601f19603f3d011682016040523d82523d6000602084013e612430565b606091505b509150915081801561245a57508051158061245a57508080602001905181019061245a919061569c565b611877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f535446000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6124d184848484612fe8565b50505050565b60007afe0000000000fe0000000000fe0000000000fe000000000000000082166801000000000000000081101561251057506000612583565b6e01000000000000000000000000000081101561252f57506001612583565b7401000000000000000000000000000000000000000081101561255457506002612583565b7a01000000000000000000000000000000000000000000000000000081101561257f57506003612583565b5060045b7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000816004036030027b01000000000001000000000001000000000001000000000000000000901c168318915050919050565b60006125e18282613655565b60000361261d576040517f93db0263000000000000000000000000000000000000000000000000000000008152600160048201526024016124bc565b60005b600481101561290c576126338382613655565b600003612683576040603082020183901c1561267e576040517f93db0263000000000000000000000000000000000000000000000000000000008152600160048201526024016124bc565b61290c565b61268d8382613429565b60020b6000036126cc576040517f93db0263000000000000000000000000000000000000000000000000000000008152600560048201526024016124bc565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276186126fc8483603002604c011c90565b60020b148061271e5750620d89e86127198483603002604c011c90565b60020b145b15612757576040517f93db02630000000000000000000000000000000000000000000000000000000081526004818101526024016124bc565b60006127638483613668565b905081811461290357816127778583613668565b146127b1576040517f93db0263000000000000000000000000000000000000000000000000000000008152600360048201526024016124bc565b6127bb848361367b565b6127c5858361367b565b1415806127e457506127d78483613655565b6127e18583613655565b14155b1561281e576040517f93db0263000000000000000000000000000000000000000000000000000000008152600360048201526024016124bc565b612828848361368e565b612832858361368e565b1461283d85846136a1565b61284786846136a1565b1403612882576040517f93db0263000000000000000000000000000000000000000000000000000000008152601560048201526024016124bc565b6128918483603002604c011c90565b60020b6128a38583603002604c011c90565b60020b1480156128ca57506128b88483613429565b60020b6128c58583613429565b60020b145b15612903576040517f93db02630000000000000000000000000000000000000000000000000000000081526004818101526024016124bc565b50600101612620565b50816105a8565b6000808086868583612924836136b4565b905060005b81811015612a215760008361293e5781612954565b600161294a83856151d9565b61295491906151d9565b905060006129d286838e8a73ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cd91906156b9565b613769565b905060008060006129e68a8a87878c613812565b919450925090506129f78d84612f6c565b9c50612a038b83612f6c565b9a50612a0f8c82612f6c565b9b508560010195505050505050612929565b50505050509450945094915050565b600080806060878783608082901d9050604051806040016040528060405180606001604052808673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac591906153f2565b73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4f91906153f2565b73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd991906156d6565b62ffffff169052815233602091820152604051612c3f9291018151805173ffffffffffffffffffffffffffffffffffffffff908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b604051602081830303815290604052935081600f0b600014158015612c68575080600f0b600014155b15612e4a5760008373ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015612cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cde919061558f565b505050505050905060008173ffffffffffffffffffffffffffffffffffffffff1683600f0b6c010000000000000000000000000281612d1f57612d1f615627565b05600085600f0b13612d6857612d60856000036fffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16613a88565b600003612d9a565b612d9a856fffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16613a88565b03905060008273ffffffffffffffffffffffffffffffffffffffff16826c010000000000000000000000000281612dd357612dd3615627565b0590506000808313612e0757612e02836000038573ffffffffffffffffffffffffffffffffffffffff16613a88565b612e2b565b612e27838573ffffffffffffffffffffffffffffffffffffffff16613a88565b6000035b9050818112995089612e3d5780612e3f565b815b985050505050612e7f565b81600f0b600014612e6c57600082600f0b12955081600003600f0b9450612e7f565b600081600f0b13955080600003600f0b94505b6000808473ffffffffffffffffffffffffffffffffffffffff1663128acb08338a8a8c612ec05773fffd8963efd1fc6a506488495d951d5263988d25612ec7565b6401000276a45b8b6040518663ffffffff1660e01b8152600401612ee89594939291906156f3565b60408051808303816000875af1158015612f06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2a919061573a565b91509150612f5b612f3a82613b2c565b611e2b612f4685613b2c565b6fffffffffffffffffffffffffffffffff1690565b9d9c50505050505050505050505050565b600080612f798360801d90565b600f0b612f868560801d90565b600f0b01905080600084600f0b86600f0b01905060008190508383600f0b141580611dda57508181600f0b14611e11576040517fd219017400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060036000612ff7856125d5565b67ffffffffffffffff168152602081019190915260400160009081205473ffffffffffffffffffffffffffffffffffffffff169150613035846136b4565b905060005b818110156118fb5760006130958683878773ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a9573d6000803e3d6000fd5b9050600084896130a589866136a1565b6130af8560e81c90565b6130b98660d01c90565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606096871b811660208301529490951b9093166034850152604884019190915260e890811b60688401521b606b820152606e01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209050600085896131568a876136a1565b6131608660e81c90565b61316a8760d01c90565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606096871b811660208301529490951b9093166034850152604884019190915260e890811b60688401521b606b820152606e01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060008181526004909352912054909150151580613221575060008181526007602052604090205415155b15613258576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260046020526040902054836fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff16146132c4576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083815260076020818152604080842080548786526004845282862096909655878552818520859055958452919052812091909155918252555060010161303a565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8587098587029250828110838203039150508060000361335e576000841161335357600080fd5b5082900490506133d1565b80841161336a57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b806fffffffffffffffffffffffffffffffff81168114613424576040517fb668004500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60006110006064603084020184901c5b069392505050565b600061344d8583613b6a565b945061346d61345c8585613429565b610fff16606460308502011b860190565b94506134936134818585603002604c011c90565b62ffffff16604c60308502011b860190565b94506134aa6134a28585613655565b869084613c31565b94506134c16134b985856136a1565b869084613c4c565b94506134d86134d0858561368e565b869084613c5d565b94506134ef6134e7858561367b565b869084613c6e565b9450611d89858380613c7f565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061353e57600080fd5b8151602080840151604080860151815173ffffffffffffffffffffffffffffffffffffffff95861681860152949092168482015262ffffff90911660608085019190915281518085038201815260808501909252815191909201207fff0000000000000000000000000000000000000000000000000000000000000060a08401529085901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d582015260f501604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209392505050565b600060806041603084020184901c613439565b60006004604a603084020184901c613439565b600060026040603084020184901c613439565b600060026048603084020184901c613439565b600060026049603084020184901c613439565b60007afe0000000000fe0000000000fe0000000000fe00000000000000008216680100000000000000008110156136ee5750600092915050565b6e01000000000000000000000000000081101561370e5750600192915050565b740100000000000000000000000000000000000000008110156137345750600292915050565b7a0100000000000000000000000000000000000000000000000000008110156137605750600392915050565b50600492915050565b60008080613778878786613c90565b909250905060008061378a8989613655565b6137a6906fffffffffffffffffffffffffffffffff8916615656565b90506137b2898961367b565b6000036137db576137d46137c585613df5565b6137ce85613df5565b8361415c565b91506137f9565b6137f66137e785613df5565b6137f085613df5565b83614202565b91505b61380585858585611d46565b9998505050505050505050565b60008060008061382288886136a1565b905060008933836138338a60e81c90565b61383d8b60d01c90565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606096871b811660208301529490951b9093166034850152604884019190915260e890811b60688401521b606b820152606e016040516020818303038152906040528051906020012090506000806138b98b8b61368e565b6000848152600460205260408120549192508190608082901c908c908590036138f25780830195508b156138ed5780820391505b61395f565b806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015613950576040517f4323a55500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80830395508b61395f57908101905b6fffffffffffffffffffffffffffffffff8616608083901b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016016000888152600460205260409020555050821590506139c2576139bd8a8e614263565b6139cc565b6139cc8a8e614364565b9750846001036139fb5787600f81900b156139f9576fffffffffffffffffffffffffffffffff8116880197505b505b84600003613a2d576000613a0f8960801d90565b905080600f0b600014613a2b57613a28888260801b0190565b97505b505b6fffffffffffffffffffffffffffffffff811615613a5657613a538a8e83878c8761467d565b95505b613a618d848c614848565b60076000868152602001908152602001600020819055505050505050955095509592505050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84860984860292508281108382030391505080600003613ad2575060601c90506105a8565b806c0100000000000000000000000011613aeb57600080fd5b60006c0100000000000000000000000085870980840360601c9310909103740100000000000000000000000000000000000000000291909117949350505050565b80600f81900b8114613424576040517fb668004500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600003613b9d57507fffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffff82166105a8565b81600103613bce57507fffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffff82166105a8565b81600203613bff57507fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff82166105a8565b81600303613c2a575079ffffffffffffffffffffffffffffffffffffffffffffffffffff82166105a8565b5090919050565b6000604160308302016080845b06901b840190509392505050565b600060496030830201600284613c3e565b600060486030830201600284613c3e565b600060406030830201600284613c3e565b6000604a6030830201600484613c3e565b60008080613c9e8686613429565b90506000613cb18787603002604c011c90565b9050600085600281900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761881613ce957613ce9615627565b05029050600086600281900b620d89e881613d0657613d06615627565b0502905060006002858902810b05808503975084810196509050600288810b9088900b81613d3657613d36615627565b0760020b151580613d5e57508760020b8660020b81613d5757613d57615627565b0760020b15155b15613d95576040517fc82825f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260020b8760020b1280613dae57508160020b8660020b135b15613de8576040517f93db0263000000000000000000000000000000000000000000000000000000008152600560048201526024016124bc565b5050505050935093915050565b60008060008360020b12613e0c578260020b613e14565b8260020b6000035b9050620d89e8811115613e53576040517f2bc80f3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600116600003613e7757700100000000000000000000000000000000613e89565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615613ebd576ffff97272373d413259a46990580e213a0260801c5b6004821615613edc576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613efb576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613f1a576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613f39576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613f58576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613f77576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613f97576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613fb7576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613fd7576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613ff7576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615614017576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615614037576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615614057576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615614077576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614098576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156140b8576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156140d7576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156140f4576b048a170391f7dc42444e8fa20260801c5b60008460020b131561413357807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161412f5761412f615627565b0490505b64010000000081061561414757600161414a565b60005b60ff16602082901c0192505050919050565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115614196579192915b60006141ce8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16613a88565b9050611d896141fd84836141e2898961575e565b73ffffffffffffffffffffffffffffffffffffffff16613307565b6149cc565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16111561423c579192915b61425b6141fd836c010000000000000000000000006141e2888861575e565b949350505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663a34123a761428e8760e81c90565b6142988860d01c90565b886040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600293840b60048201529190920b60248201526fffffffffffffffffffffffffffffffff909116604482015260640160408051808303816000875af1158015614312573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614336919061573a565b91509150611d89614346826133d8565b61434f9061578b565b611e2b61435b856133d8565b612f469061578b565b600080604051806040016040528060405180606001604052808673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143ec91906153f2565b73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015614452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061447691906153f2565b73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061450091906156d6565b62ffffff1690528152336020918201526040516145669291018151805173ffffffffffffffffffffffffffffffffffffffff908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b60405160208183030381529060405290506000808473ffffffffffffffffffffffffffffffffffffffff16633c8a7d8d306145a18960e81c90565b6145ab8a60d01c90565b8a886040518663ffffffff1660e01b81526004016145cd9594939291906157c9565b60408051808303816000875af11580156145eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061460f919061573a565b90925090506032821080156146245750603281105b1561465b576040517f4323a55500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614673614667826133d8565b611e2b612f46856133d8565b9695505050505050565b600083815260076020526040812054859082906146a59061469f8a858d614848565b90611d92565b9050836001036146bc576146b98186611d92565b90505b801561483c576000808973ffffffffffffffffffffffffffffffffffffffff16634f1eb3d8336146ec8e60e81c90565b6146f68f60d01c90565b876147018960801d90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff9095166004860152600293840b60248601529190920b60448401526fffffffffffffffffffffffffffffffff918216606484015216608482015260a40160408051808303816000875af115801561479d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c19190615822565b9150915060008060006147d18a90565b600f0b126147df57836147e3565b8884015b915060006147f18a60801d90565b600f0b126147ff578261480c565b6148098960801d90565b83015b905061482a816fffffffffffffffffffffffffffffffff8416611e2b565b96506148378a8c896149eb565b505050505b50509695505050505050565b6000806000806148cc3061485c8760e81c90565b6148668860d01c90565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b16602082015260e883811b603483015282901b6037820152600090603a016040516020818303038152906040528051906020012090509392505050565b6040517f514ea4bf0000000000000000000000000000000000000000000000000000000081526004810182905290915073ffffffffffffffffffffffffffffffffffffffff88169063514ea4bf9060240160a060405180830381865afa15801561493a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061495e9190615851565b509195509350614673925061499b91508390506fffffffffffffffffffffffffffffffff8816700100000000000000000000000000000000613307565b611e2b612f4685896fffffffffffffffffffffffffffffffff16700100000000000000000000000000000000613307565b806fffffffffffffffffffffffffffffffff8116811461342457600080fd5b6000806149f88484611e3e565b6000878152600560205260409020549193509150614a169083612001565b600086815260056020908152604080832093909355600690522054614a3b9082612001565b6000958652600660205260409095209490945550505050565b73ffffffffffffffffffffffffffffffffffffffff81168114614a7657600080fd5b50565b60008060408385031215614a8c57600080fd5b8235614a9781614a54565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114614a7657600080fd5b600060208284031215614ae557600080fd5b81356133d181614aa5565b6fffffffffffffffffffffffffffffffff81168114614a7657600080fd5b8060020b8114614a7657600080fd5b60008060008060808587031215614b3357600080fd5b843593506020850135614b4581614af0565b92506040850135614b5581614b0e565b91506060850135614b6581614b0e565b939692955090935050565b60008083601f840112614b8257600080fd5b50813567ffffffffffffffff811115614b9a57600080fd5b6020830191508360208260051b8501011115614bb557600080fd5b9250929050565b60008083601f840112614bce57600080fd5b50813567ffffffffffffffff811115614be657600080fd5b602083019150836020828501011115614bb557600080fd5b60008060008060008060008060a0898b031215614c1a57600080fd5b8835614c2581614a54565b97506020890135614c3581614a54565b9650604089013567ffffffffffffffff80821115614c5257600080fd5b614c5e8c838d01614b70565b909850965060608b0135915080821115614c7757600080fd5b614c838c838d01614b70565b909650945060808b0135915080821115614c9c57600080fd5b50614ca98b828c01614bbc565b999c989b5096995094979396929594505050565b600080600080600080600060e0888a031215614cd857600080fd5b8735614ce381614a54565b96506020880135614cf381614a54565b9550604088013594506060880135614d0a81614b0e565b93506080880135614d1a81614b0e565b925060a0880135614d2a81614b0e565b8092505060c0880135905092959891949750929550565b60008060008060408587031215614d5757600080fd5b843567ffffffffffffffff80821115614d6f57600080fd5b614d7b88838901614b70565b90965094506020870135915080821115614d9457600080fd5b50614da187828801614b70565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015614de557835183529284019291840191600101614dc9565b50909695505050505050565b8015158114614a7657600080fd5b60008060408385031215614e1257600080fd5b8235614e1d81614a54565b91506020830135614e2d81614df1565b809150509250929050565b600080600080600060a08688031215614e5057600080fd5b85359450602086013593506040860135614e6981614af0565b92506060860135614e7981614b0e565b91506080860135614e8981614b0e565b809150509295509295909350565b600080600080600060a08688031215614eaf57600080fd5b8535614eba81614a54565b94506020860135614eca81614a54565b9350604086013592506060860135614e7981614b0e565b60008060208385031215614ef457600080fd5b823567ffffffffffffffff811115614f0b57600080fd5b614f1785828601614b70565b90969095509350505050565b60005b83811015614f3e578181015183820152602001614f26565b50506000910152565b60008151808452614f5f816020860160208601614f23565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015615004577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614ff2858351614f47565b94509285019290850190600101614fb8565b5092979650505050505050565b62ffffff81168114614a7657600080fd5b60008060006060848603121561503757600080fd5b833561504281614a54565b9250602084013561505281614a54565b9150604084013561506281615011565b809150509250925092565b60006020828403121561507f57600080fd5b81356133d181614a54565b600080600080606085870312156150a057600080fd5b8435935060208501359250604085013567ffffffffffffffff8111156150c557600080fd5b614da187828801614bbc565b600080604083850312156150e457600080fd5b82356150ef81614a54565b91506020830135614e2d81614a54565b60008060008060008060a0878903121561511857600080fd5b863561512381614a54565b9550602087013561513381614a54565b94506040870135935060608701359250608087013567ffffffffffffffff81111561515d57600080fd5b61516989828a01614bbc565b979a9699509497509295939492505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156105a8576105a86151aa565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561521e57600080fd5b8260051b80836020870137939093016020019392505050565b60408152600061524b6040830186886151ec565b8281036020840152611e338185876151ec565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525060a060408301526152e160a08301888a6151ec565b82810360608401526152f48187896151ec565b9050828103608084015261530981858761525e565b9b9a5050505050505050505050565b60006020828403121561532a57600080fd5b81516133d181614aa5565b60006020828403121561534757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126153b257600080fd5b83018035915067ffffffffffffffff8211156153cd57600080fd5b602001915036819003821315614bb557600080fd5b8183823760009101908152919050565b60006020828403121561540457600080fd5b81516133d181614a54565b6040516060810167ffffffffffffffff81118282101715615459577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000818303608081121561547257600080fd5b6040516040810181811067ffffffffffffffff821117156154bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405260608212156154cd57600080fd5b6154d561540f565b915083356154e281614a54565b825260208401356154f281614a54565b6020830152604084013561550581615011565b604083015290815260608301359061551c82614a54565b60208101919091529392505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a0608083015261557160a08301848661525e565b98975050505050505050565b805161ffff8116811461342457600080fd5b600080600080600080600060e0888a0312156155aa57600080fd5b87516155b581614a54565b60208901519097506155c681614b0e565b95506155d46040890161557d565b94506155e26060890161557d565b93506155f06080890161557d565b925060a088015160ff8116811461560657600080fd5b60c089015190925061561781614df1565b8091505092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b80820281158282048414176105a8576105a86151aa565b808201808211156105a8576105a86151aa565b60008251615692818460208701614f23565b9190910192915050565b6000602082840312156156ae57600080fd5b81516133d181614df1565b6000602082840312156156cb57600080fd5b81516133d181614b0e565b6000602082840312156156e857600080fd5b81516133d181615011565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152611e3360a0830184614f47565b6000806040838503121561574d57600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff828116828216039080821115611268576112686151aa565b600081600f0b7fffffffffffffffffffffffffffffffff8000000000000000000000000000000081036157c0576157c06151aa565b60000392915050565b73ffffffffffffffffffffffffffffffffffffffff861681528460020b60208201528360020b60408201526fffffffffffffffffffffffffffffffff8316606082015260a060808201526000611e3360a0830184614f47565b6000806040838503121561583557600080fd5b825161584081614af0565b6020840151909250614e2d81614af0565b600080600080600060a0868803121561586957600080fd5b855161587481614af0565b809550506020860151935060408601519250606086015161589481614af0565b6080870151909250614e8981614af056fea2646970667358221220ece031279e50455b391d65fa14911739580679af996d3c59b03bafbe7e07127364736f6c634300081200330000000000000000000000003220b52a7f878a9da5bc54c224e1bd34642df65b