60806040526001600755348015610014575f80fd5b50336040518060600160405280602a81526020016141c8602a913961003e816100c460201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100af575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100a691906101d9565b60405180910390fd5b6100be816100d760201b60201c565b506104fb565b80600290816100d3919061042c565b5050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101c38261019a565b9050919050565b6101d3816101b9565b82525050565b5f6020820190506101ec5f8301846101ca565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061026d57607f821691505b6020821081036102805761027f610229565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026102e27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102a7565b6102ec86836102a7565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61033061032b61032684610304565b61030d565b610304565b9050919050565b5f819050919050565b61034983610316565b61035d61035582610337565b8484546102b3565b825550505050565b5f90565b610371610365565b61037c818484610340565b505050565b5b8181101561039f576103945f82610369565b600181019050610382565b5050565b601f8211156103e4576103b581610286565b6103be84610298565b810160208510156103cd578190505b6103e16103d985610298565b830182610381565b50505b505050565b5f82821c905092915050565b5f6104045f19846008026103e9565b1980831691505092915050565b5f61041c83836103f5565b9150826002028217905092915050565b610435826101f2565b67ffffffffffffffff81111561044e5761044d6101fc565b5b6104588254610256565b6104638282856103a3565b5f60209050601f831160018114610494575f8415610482578287015190505b61048c8582610411565b8655506104f3565b601f1984166104a286610286565b5f5b828110156104c9578489015182556001820191506020850194506020810190506104a4565b868310156104e657848901516104e2601f8916826103f5565b8355505b6001600288020188555050505b505050505050565b613cc0806105085f395ff3fe608060405260043610610149575f3560e01c806360fb85fd116100b5578063a22cb4651161006e578063a22cb465146104c5578063bc197c81146104ed578063e985e9c514610529578063f23a6e6114610565578063f242432a146105a1578063f2fde38b146105c957610149565b806360fb85fd146103c257806366269bfc14610403578063715018a61461043f5780638bf0af3e146104555780638da5cb5b14610471578063908118401461049b57610149565b806320e7c6d41161010757806320e7c6d41461027c5780632bf217b1146102bd5780632eb2c2d6146102fa5780633bed33ce146103225780634e1273f41461034a5780635b2cdb221461038657610149565b8062fdd58e1461014d57806301ffc9a714610189578063047087cc146101c557806305e19236146101f05780630e89341c146102185780631fdfe21214610254575b5f80fd5b348015610158575f80fd5b50610173600480360381019061016e9190612a3a565b6105f1565b6040516101809190612a87565b60405180910390f35b348015610194575f80fd5b506101af60048036038101906101aa9190612af5565b610646565b6040516101bc9190612b3a565b60405180910390f35b3480156101d0575f80fd5b506101d9610657565b6040516101e7929190612b53565b60405180910390f35b3480156101fb575f80fd5b5061021660048036038101906102119190612ba4565b6106c8565b005b348015610223575f80fd5b5061023e60048036038101906102399190612bf4565b610817565b60405161024b9190612c8f565b60405180910390f35b34801561025f575f80fd5b5061027a60048036038101906102759190612caf565b6108a9565b005b348015610287575f80fd5b506102a2600480360381019061029d9190612bf4565b610ae9565b6040516102b496959493929190612cfc565b60405180910390f35b3480156102c8575f80fd5b506102e360048036038101906102de9190612d5b565b610b4d565b6040516102f1929190612b53565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190612f89565b610c7b565b005b34801561032d575f80fd5b5061034860048036038101906103439190612bf4565b610ccd565b005b348015610355575f80fd5b50610370600480360381019061036b9190613114565b610d69565b60405161037d9190613241565b60405180910390f35b348015610391575f80fd5b506103ac60048036038101906103a79190612caf565b610e70565b6040516103b99190613261565b60405180910390f35b3480156103cd575f80fd5b506103e860048036038101906103e39190612bf4565b610eb8565b6040516103fa9695949392919061327a565b60405180910390f35b34801561040e575f80fd5b5061042960048036038101906104249190612bf4565b610fa7565b6040516104369190613390565b60405180910390f35b34801561044a575f80fd5b50610453611098565b005b61046f600480360381019061046a9190612caf565b6110ab565b005b34801561047c575f80fd5b506104856113d6565b6040516104929190613261565b60405180910390f35b3480156104a6575f80fd5b506104af6113fe565b6040516104bc9190612a87565b60405180910390f35b3480156104d0575f80fd5b506104eb60048036038101906104e691906133b0565b611404565b005b3480156104f8575f80fd5b50610513600480360381019061050e9190612f89565b61141a565b60405161052091906133fd565b60405180910390f35b348015610534575f80fd5b5061054f600480360381019061054a9190613416565b61142e565b60405161055c9190612b3a565b60405180910390f35b348015610570575f80fd5b5061058b60048036038101906105869190613454565b6114bc565b60405161059891906133fd565b60405180910390f35b3480156105ac575f80fd5b506105c760048036038101906105c29190613454565b6114d0565b005b3480156105d4575f80fd5b506105ef60048036038101906105ea91906134e7565b6114ef565b005b5f805f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f61065082611573565b9050919050565b5f805f805f600190505b6007548110156106bb5760045f8281526020019081526020015f205f01548361068a919061353f565b925060045f8281526020019081526020015f2060010154826106ac919061353f565b91508080600101915050610661565b5081819350935050509091565b5f60045f8581526020019081526020015f2090505f815f015411610721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610718906135bc565b60405180910390fd5b8060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107aa90613624565b60405180910390fd5b82816003015f6101000a81548160ff021916908315150217905550818160020181905550837fab2770b29de2adc49d0c01df43d08c90be7762fb986cc83601866a2b78a2cf9e8484604051610809929190613642565b60405180910390a250505050565b60606002805461082690613696565b80601f016020809104026020016040519081016040528092919081815260200182805461085290613696565b801561089d5780601f106108745761010080835404028352916020019161089d565b820191905f5260205f20905b81548152906001019060200180831161088057829003601f168201915b50505050509050919050565b6108b16115ec565b5f60075490505f655af3107a400083856108cb91906136c6565b6108d59190613734565b90505f60045f8481526020019081526020015f205f01541461092c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610923906137ae565b60405180910390fd5b6040518060c001604052808281526020018281526020018481526020016001151581526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018581525060045f8481526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555060808201518160030160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040155905050600160065f8481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610a9030838360405180602001604052805f815250611673565b817f3c6a495d6ebc5387576dc0e114d29e024f1ad1b86e0cc06a403722f05e518f4e828587604051610ac4939291906137cc565b60405180910390a260075f815480929190610ade90613801565b919050555050505050565b6004602052805f5260405f205f91509050805f015490806001015490806002015490806003015f9054906101000a900460ff16908060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905086565b5f805f60045f8681526020019081526020015f206040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152505090505f815f015111610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c41906135bc565b60405180910390fd5b610c5484866105f1565b9250805f0151606484610c6791906136c6565b610c719190613734565b9150509250929050565b610c888585858585611708565b5f5b8351811015610cc557610cb8848281518110610ca957610ca8613848565b5b602002602001015187876117af565b8080600101915050610c8a565b505050505050565b610cd56115ec565b5f8190505f47905081811015610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d17906138bf565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015610d63573d5f803e3d5ffd5b50505050565b60608151835114610db557815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610dac929190612b53565b60405180910390fd5b5f835167ffffffffffffffff811115610dd157610dd0612d9d565b5b604051908082528060200260200182016040528015610dff5781602001602082028036833780820191505090505b5090505f5b8451811015610e6557610e3b610e23828761196290919063ffffffff16565b610e36838761197590919063ffffffff16565b6105f1565b828281518110610e4e57610e4d613848565b5b602002602001018181525050806001019050610e04565b508091505092915050565b6005602052815f5260405f208181548110610e89575f80fd5b905f5260205f20015f915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f805f805f60045f8981526020019081526020015f206040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015f9054906101000a900460ff161515151581526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152505090508060a00151815f015182602001518360400151846060015185608001519650965096509650965096505091939550919395565b60605f60045f8481526020019081526020015f205f015411610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff5906135bc565b60405180910390fd5b60055f8381526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561108c57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611043575b50505050509050919050565b6110a06115ec565b6110a95f611988565b565b5f60045f8481526020019081526020015f209050806003015f9054906101000a900460ff1661110f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110690613927565b60405180910390fd5b8181600101541015611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d9061398f565b60405180910390fd5b5f81600201548361116791906136c6565b9050803410156111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a3906139f7565b60405180910390fd5b80341115611209575f81346111c19190613a15565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611206573d5f803e3d5ffd5b50505b82826001015f82825461121c9190613a15565b925050819055505f82600101540361124a575f826003015f6101000a81548160ff0219169083151502179055505b6112653033868660405180602001604052805f815250611a4b565b60065f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166113965760055f8581526020019081526020015f2033908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f8681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b837faf357506555a8fdf38c81d9a8fa2c6bca372e817f179cf596c9645902a927aea33856040516113c8929190613a48565b60405180910390a250505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075481565b61141661140f611b51565b8383611b58565b5050565b5f63bc197c8160e01b905095945050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f63f23a6e6160e01b905095945050505050565b6114dd8585858585611cc1565b6114e88386866117af565b5050505050565b6114f76115ec565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611567575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161155e9190613261565b60405180910390fd5b61157081611988565b50565b5f7f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806115e557506115e482611d68565b5b9050919050565b6115f4611b51565b73ffffffffffffffffffffffffffffffffffffffff166116126113d6565b73ffffffffffffffffffffffffffffffffffffffff161461167157611635611b51565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016116689190613261565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036116e3575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016116da9190613261565b60405180910390fd5b5f806116ef8585611e49565b915091506117005f87848487611e79565b505050505050565b5f611711611b51565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156117565750611754868261142e565b155b1561179a5780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401611791929190613a6f565b60405180910390fd5b6117a78686868686611f25565b505050505050565b5f6117ba83856105f1565b14801561181c575060065f8481526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561182c5761182b8383612019565b5b60065f8481526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661195d5760055f8481526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f8581526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611abb575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401611ab29190613261565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611b2b575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401611b229190613261565b60405180910390fd5b5f80611b378585611e49565b91509150611b488787848487611e79565b50505050505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bc8575f6040517fced3e100000000000000000000000000000000000000000000000000000000008152600401611bbf9190613261565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cb49190612b3a565b60405180910390a3505050565b5f611cca611b51565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015611d0f5750611d0d868261142e565b155b15611d535780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401611d4a929190613a6f565b60405180910390fd5b611d608686868686611a4b565b505050505050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e3257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e425750611e4182612245565b5b9050919050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b611e85858585856122ae565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611f1e575f611ec1611b51565b90506001845103611f0d575f611ee05f8661197590919063ffffffff16565b90505f611ef65f8661197590919063ffffffff16565b9050611f0683898985858961263e565b5050611f1c565b611f1b8187878787876127ed565b5b505b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f95575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401611f8c9190613261565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612005575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401611ffc9190613261565b60405180910390fd5b6120128585858585611e79565b5050505050565b5f60055f8481526020019081526020015f208054905090505f5b818110156121dc578273ffffffffffffffffffffffffffffffffffffffff1660055f8681526020019081526020015f20828154811061207557612074613848565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036121cf5760055f8581526020019081526020015f206001836120d69190613a15565b815481106120e7576120e6613848565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055f8681526020019081526020015f20828154811061213257612131613848565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055f8581526020019081526020015f2080548061219857612197613a96565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556121dc565b8080600101915050612033565b505f60065f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b80518251146122f857815181516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016122ef929190612b53565b60405180910390fd5b5f612301611b51565b90505f5b83518110156124fd575f612322828661197590919063ffffffff16565b90505f612338838661197590919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461245b575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561240757888183856040517f03dee4c50000000000000000000000000000000000000000000000000000000081526004016123fe9493929190613ac3565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146124f057805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124e8919061353f565b925050819055505b5050806001019050612305565b5060018351036125b8575f61251b5f8561197590919063ffffffff16565b90505f6125315f8561197590919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516125a9929190612b53565b60405180910390a45050612637565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161262e929190613b06565b60405180910390a45b5050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b11156127e5578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161269e959493929190613b8d565b6020604051808303815f875af19250505080156126d957506040513d601f19601f820116820180604052508101906126d69190613bf9565b60015b61275a573d805f8114612707576040519150601f19603f3d011682016040523d82523d5f602084013e61270c565b606091505b505f81510361275257846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016127499190613261565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146127e357846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016127da9190613261565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115612994578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161284d959493929190613c24565b6020604051808303815f875af192505050801561288857506040513d601f19601f820116820180604052508101906128859190613bf9565b60015b612909573d805f81146128b6576040519150601f19603f3d011682016040523d82523d5f602084013e6128bb565b606091505b505f81510361290157846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016128f89190613261565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461299257846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016129899190613261565b60405180910390fd5b505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6129d6826129ad565b9050919050565b6129e6816129cc565b81146129f0575f80fd5b50565b5f81359050612a01816129dd565b92915050565b5f819050919050565b612a1981612a07565b8114612a23575f80fd5b50565b5f81359050612a3481612a10565b92915050565b5f8060408385031215612a5057612a4f6129a5565b5b5f612a5d858286016129f3565b9250506020612a6e85828601612a26565b9150509250929050565b612a8181612a07565b82525050565b5f602082019050612a9a5f830184612a78565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ad481612aa0565b8114612ade575f80fd5b50565b5f81359050612aef81612acb565b92915050565b5f60208284031215612b0a57612b096129a5565b5b5f612b1784828501612ae1565b91505092915050565b5f8115159050919050565b612b3481612b20565b82525050565b5f602082019050612b4d5f830184612b2b565b92915050565b5f604082019050612b665f830185612a78565b612b736020830184612a78565b9392505050565b612b8381612b20565b8114612b8d575f80fd5b50565b5f81359050612b9e81612b7a565b92915050565b5f805f60608486031215612bbb57612bba6129a5565b5b5f612bc886828701612a26565b9350506020612bd986828701612b90565b9250506040612bea86828701612a26565b9150509250925092565b5f60208284031215612c0957612c086129a5565b5b5f612c1684828501612a26565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612c6182612c1f565b612c6b8185612c29565b9350612c7b818560208601612c39565b612c8481612c47565b840191505092915050565b5f6020820190508181035f830152612ca78184612c57565b905092915050565b5f8060408385031215612cc557612cc46129a5565b5b5f612cd285828601612a26565b9250506020612ce385828601612a26565b9150509250929050565b612cf6816129cc565b82525050565b5f60c082019050612d0f5f830189612a78565b612d1c6020830188612a78565b612d296040830187612a78565b612d366060830186612b2b565b612d436080830185612ced565b612d5060a0830184612a78565b979650505050505050565b5f8060408385031215612d7157612d706129a5565b5b5f612d7e85828601612a26565b9250506020612d8f858286016129f3565b9150509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612dd382612c47565b810181811067ffffffffffffffff82111715612df257612df1612d9d565b5b80604052505050565b5f612e0461299c565b9050612e108282612dca565b919050565b5f67ffffffffffffffff821115612e2f57612e2e612d9d565b5b602082029050602081019050919050565b5f80fd5b5f612e56612e5184612e15565b612dfb565b90508083825260208201905060208402830185811115612e7957612e78612e40565b5b835b81811015612ea25780612e8e8882612a26565b845260208401935050602081019050612e7b565b5050509392505050565b5f82601f830112612ec057612ebf612d99565b5b8135612ed0848260208601612e44565b91505092915050565b5f80fd5b5f67ffffffffffffffff821115612ef757612ef6612d9d565b5b612f0082612c47565b9050602081019050919050565b828183375f83830152505050565b5f612f2d612f2884612edd565b612dfb565b905082815260208101848484011115612f4957612f48612ed9565b5b612f54848285612f0d565b509392505050565b5f82601f830112612f7057612f6f612d99565b5b8135612f80848260208601612f1b565b91505092915050565b5f805f805f60a08688031215612fa257612fa16129a5565b5b5f612faf888289016129f3565b9550506020612fc0888289016129f3565b945050604086013567ffffffffffffffff811115612fe157612fe06129a9565b5b612fed88828901612eac565b935050606086013567ffffffffffffffff81111561300e5761300d6129a9565b5b61301a88828901612eac565b925050608086013567ffffffffffffffff81111561303b5761303a6129a9565b5b61304788828901612f5c565b9150509295509295909350565b5f67ffffffffffffffff82111561306e5761306d612d9d565b5b602082029050602081019050919050565b5f61309161308c84613054565b612dfb565b905080838252602082019050602084028301858111156130b4576130b3612e40565b5b835b818110156130dd57806130c988826129f3565b8452602084019350506020810190506130b6565b5050509392505050565b5f82601f8301126130fb576130fa612d99565b5b813561310b84826020860161307f565b91505092915050565b5f806040838503121561312a576131296129a5565b5b5f83013567ffffffffffffffff811115613147576131466129a9565b5b613153858286016130e7565b925050602083013567ffffffffffffffff811115613174576131736129a9565b5b61318085828601612eac565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6131bc81612a07565b82525050565b5f6131cd83836131b3565b60208301905092915050565b5f602082019050919050565b5f6131ef8261318a565b6131f98185613194565b9350613204836131a4565b805f5b8381101561323457815161321b88826131c2565b9750613226836131d9565b925050600181019050613207565b5085935050505092915050565b5f6020820190508181035f83015261325981846131e5565b905092915050565b5f6020820190506132745f830184612ced565b92915050565b5f60c08201905061328d5f830189612a78565b61329a6020830188612a78565b6132a76040830187612a78565b6132b46060830186612a78565b6132c16080830185612b2b565b6132ce60a0830184612ced565b979650505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61330b816129cc565b82525050565b5f61331c8383613302565b60208301905092915050565b5f602082019050919050565b5f61333e826132d9565b61334881856132e3565b9350613353836132f3565b805f5b8381101561338357815161336a8882613311565b975061337583613328565b925050600181019050613356565b5085935050505092915050565b5f6020820190508181035f8301526133a88184613334565b905092915050565b5f80604083850312156133c6576133c56129a5565b5b5f6133d3858286016129f3565b92505060206133e485828601612b90565b9150509250929050565b6133f781612aa0565b82525050565b5f6020820190506134105f8301846133ee565b92915050565b5f806040838503121561342c5761342b6129a5565b5b5f613439858286016129f3565b925050602061344a858286016129f3565b9150509250929050565b5f805f805f60a0868803121561346d5761346c6129a5565b5b5f61347a888289016129f3565b955050602061348b888289016129f3565b945050604061349c88828901612a26565b93505060606134ad88828901612a26565b925050608086013567ffffffffffffffff8111156134ce576134cd6129a9565b5b6134da88828901612f5c565b9150509295509295909350565b5f602082840312156134fc576134fb6129a5565b5b5f613509848285016129f3565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61354982612a07565b915061355483612a07565b925082820190508082111561356c5761356b613512565b5b92915050565b7f4c616e642070617263656c20646f6573206e6f742065786973740000000000005f82015250565b5f6135a6601a83612c29565b91506135b182613572565b602082019050919050565b5f6020820190508181035f8301526135d38161359a565b9050919050565b7f4f6e6c792073656c6c65722063616e207570646174652073616c6500000000005f82015250565b5f61360e601b83612c29565b9150613619826135da565b602082019050919050565b5f6020820190508181035f83015261363b81613602565b9050919050565b5f6040820190506136555f830185612b2b565b6136626020830184612a78565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806136ad57607f821691505b6020821081036136c0576136bf613669565b5b50919050565b5f6136d082612a07565b91506136db83612a07565b92508282026136e981612a07565b91508282048414831517613700576136ff613512565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61373e82612a07565b915061374983612a07565b92508261375957613758613707565b5b828204905092915050565b7f4c616e642070617263656c20616c7265616479206578697374730000000000005f82015250565b5f613798601a83612c29565b91506137a382613764565b602082019050919050565b5f6020820190508181035f8301526137c58161378c565b9050919050565b5f6060820190506137df5f830186612a78565b6137ec6020830185612a78565b6137f96040830184612a78565b949350505050565b5f61380b82612a07565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361383d5761383c613512565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f6138a9601d83612c29565b91506138b482613875565b602082019050919050565b5f6020820190508181035f8301526138d68161389d565b9050919050565b7f4c616e642070617263656c206e6f7420666f722073616c6500000000000000005f82015250565b5f613911601883612c29565b915061391c826138dd565b602082019050919050565b5f6020820190508181035f83015261393e81613905565b9050919050565b7f496e73756666696369656e7420746f6b656e7320617661696c61626c650000005f82015250565b5f613979601d83612c29565b915061398482613945565b602082019050919050565b5f6020820190508181035f8301526139a68161396d565b9050919050565b7f496e636f7272656374207061796d656e7420616d6f756e7400000000000000005f82015250565b5f6139e1601883612c29565b91506139ec826139ad565b602082019050919050565b5f6020820190508181035f830152613a0e816139d5565b9050919050565b5f613a1f82612a07565b9150613a2a83612a07565b9250828203905081811115613a4257613a41613512565b5b92915050565b5f604082019050613a5b5f830185612ced565b613a686020830184612a78565b9392505050565b5f604082019050613a825f830185612ced565b613a8f6020830184612ced565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f608082019050613ad65f830187612ced565b613ae36020830186612a78565b613af06040830185612a78565b613afd6060830184612a78565b95945050505050565b5f6040820190508181035f830152613b1e81856131e5565b90508181036020830152613b3281846131e5565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f613b5f82613b3b565b613b698185613b45565b9350613b79818560208601612c39565b613b8281612c47565b840191505092915050565b5f60a082019050613ba05f830188612ced565b613bad6020830187612ced565b613bba6040830186612a78565b613bc76060830185612a78565b8181036080830152613bd98184613b55565b90509695505050505050565b5f81519050613bf381612acb565b92915050565b5f60208284031215613c0e57613c0d6129a5565b5b5f613c1b84828501613be5565b91505092915050565b5f60a082019050613c375f830188612ced565b613c446020830187612ced565b8181036040830152613c5681866131e5565b90508181036060830152613c6a81856131e5565b90508181036080830152613c7e8184613b55565b9050969550505050505056fea26469706673582212209d3ebf31f0927e09b0c18d3b4361f872063680a0b95164c5122f72800f9ef7af64736f6c634300081a003368747470733a2f2f6170692e6578616d706c652e636f6d2f6d657461646174612f7b69647d2e6a736f6e