60806040526040518060400160405280600b81526020017f506967656f6e205061726b0000000000000000000000000000000000000000008152505f908162000049919062000610565b506040518060400160405280600681526020017f245047454e5a00000000000000000000000000000000000000000000000000008152506001908162000090919062000610565b505f6002555f6003556012600a620000a991906200087d565b633b9aca00620000ba9190620008cd565b6004556001600860156101000a81548160ff021916908315150217905550348015620000e4575f80fd5b503360085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a6200013591906200087d565b633b9aca00620001469190620008cd565b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a6200029791906200087d565b633b9aca00620002a89190620008cd565b604051620002b7919062000928565b60405180910390a3735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307343000000000000000000000000000000000000046040518363ffffffff1660e01b81526004016200032492919062000986565b6020604051808303815f875af115801562000341573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003679190620009e4565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000a14565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200042857607f821691505b6020821081036200043e576200043d620003e3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620004a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000465565b620004ae868362000465565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004f8620004f2620004ec84620004c6565b620004cf565b620004c6565b9050919050565b5f819050919050565b6200051383620004d8565b6200052b6200052282620004ff565b84845462000471565b825550505050565b5f90565b6200054162000533565b6200054e81848462000508565b505050565b5b818110156200057557620005695f8262000537565b60018101905062000554565b5050565b601f821115620005c4576200058e8162000444565b620005998462000456565b81016020851015620005a9578190505b620005c1620005b88562000456565b83018262000553565b50505b505050565b5f82821c905092915050565b5f620005e65f1984600802620005c9565b1980831691505092915050565b5f620006008383620005d5565b9150826002028217905092915050565b6200061b82620003ac565b67ffffffffffffffff811115620006375762000636620003b6565b5b62000643825462000410565b6200065082828562000579565b5f60209050601f83116001811462000686575f841562000671578287015190505b6200067d8582620005f3565b865550620006ec565b601f198416620006968662000444565b5f5b82811015620006bf5784890151825560018201915060208501945060208101905062000698565b86831015620006df5784890151620006db601f891682620005d5565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200077e57808604811115620007565762000755620006f4565b5b6001851615620007665780820291505b8081029050620007768562000721565b945062000736565b94509492505050565b5f826200079857600190506200086a565b81620007a7575f90506200086a565b8160018114620007c05760028114620007cb5762000801565b60019150506200086a565b60ff841115620007e057620007df620006f4565b5b8360020a915084821115620007fa57620007f9620006f4565b5b506200086a565b5060208310610133831016604e8410600b84101617156200083b5782820a905083811115620008355762000834620006f4565b5b6200086a565b6200084a84848460016200072d565b92509050818404811115620008645762000863620006f4565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6200088982620004c6565b9150620008968362000871565b9250620008c57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000787565b905092915050565b5f620008d982620004c6565b9150620008e683620004c6565b9250828202620008f681620004c6565b9150828204841483151762000910576200090f620006f4565b5b5092915050565b6200092281620004c6565b82525050565b5f6020820190506200093d5f83018462000917565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200096e8262000943565b9050919050565b620009808162000962565b82525050565b5f6040820190506200099b5f83018562000975565b620009aa602083018462000975565b9392505050565b5f80fd5b620009c08162000962565b8114620009cb575f80fd5b50565b5f81519050620009de81620009b5565b92915050565b5f60208284031215620009fc57620009fb620009b1565b5b5f62000a0b84828501620009ce565b91505092915050565b611e4b8062000a225f395ff3fe6080604052600436106100f6575f3560e01c80638da5cb5b11610089578063c9567bf911610058578063c9567bf91461033d578063cc1776d314610353578063d32c99cd1461037d578063dd62ed3e146103a5576100fd565b80638da5cb5b1461028357806395d89b41146102ad578063a8aa1b31146102d7578063a9059cbb14610301576100fd565b806323b872dd116100c557806323b872dd146101b9578063313ce567146101f557806338baed511461021f57806370a0823114610247576100fd565b806306fdde0314610101578063095ea7b31461012b5780630b78f9c01461016757806318160ddd1461018f576100fd565b366100fd57005b5f80fd5b34801561010c575f80fd5b506101156103e1565b60405161012291906111d2565b60405180910390f35b348015610136575f80fd5b50610151600480360381019061014c9190611290565b610470565b60405161015e91906112e8565b60405180910390f35b348015610172575f80fd5b5061018d60048036038101906101889190611301565b61055d565b005b34801561019a575f80fd5b506101a36105c3565b6040516101b0919061134e565b60405180910390f35b3480156101c4575f80fd5b506101df60048036038101906101da9190611367565b6105e3565b6040516101ec91906112e8565b60405180910390f35b348015610200575f80fd5b50610209610686565b60405161021691906113d2565b60405180910390f35b34801561022a575f80fd5b50610245600480360381019061024091906113eb565b61068b565b005b348015610252575f80fd5b5061026d60048036038101906102689190611416565b610705565b60405161027a919061134e565b60405180910390f35b34801561028e575f80fd5b5061029761071a565b6040516102a49190611461565b60405180910390f35b3480156102b8575f80fd5b506102c161073f565b6040516102ce91906111d2565b60405180910390f35b3480156102e2575f80fd5b506102eb6107cf565b6040516102f89190611489565b60405180910390f35b34801561030c575f80fd5b5061032760048036038101906103229190611290565b6107f4565b60405161033491906112e8565b60405180910390f35b348015610348575f80fd5b50610351610808565b005b34801561035e575f80fd5b50610367610896565b604051610374919061134e565b60405180910390f35b348015610388575f80fd5b506103a3600480360381019061039e91906115ce565b61089c565b005b3480156103b0575f80fd5b506103cb60048036038101906103c69190611644565b610952565b6040516103d8919061134e565b60405180910390f35b60605f80546103ef906116af565b80601f016020809104026020016040519081016040528092919081815260200182805461041b906116af565b80156104665780601f1061043d57610100808354040283529160200191610466565b820191905f5260205f20905b81548152906001019060200180831161044957829003601f168201915b5050505050905090565b5f8160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161054b919061134e565b60405180910390a36001905092915050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105b5575f80fd5b6105bf8282610972565b5050565b6012600a6105d1919061183b565b633b9aca006105e09190611885565b81565b5f8160065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461066b91906118c6565b9250508190555061067d848484610984565b90509392505050565b601281565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106e3575f80fd5b6012600a6106f1919061183b565b816106fc9190611885565b60048190555050565b6005602052805f5260405f205f915090505481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001805461074e906116af565b80601f016020809104026020016040519081016040528092919081815260200182805461077a906116af565b80156107c55780601f1061079c576101008083540402835291602001916107c5565b820191905f5260205f20905b8154815290600101906020018083116107a857829003601f168201915b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610800338484610984565b905092915050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610860575f80fd5b600860159054906101000a900460ff1615610879575f80fd5b6001600860156101000a81548160ff021916908315150217905550565b60035481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f4575f80fd5b815f90816109029190611a96565b5080600190816109129190611a96565b507f6c5d2637118cb4115becb3c3e6e553db25400cb3ffe8fd6fb2a2b4e01433862782823360405161094693929190611b65565b60405180910390a15050565b6006602052815f5260405f20602052805f5260405f205f91509150505481565b81600281905550806003819055505050565b5f600860159054906101000a900460ff16806109ec575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80610a43575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b610a4b575f80fd5b600860159054906101000a900460ff16158015610ab457505f73ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b8015610abf57505f82115b15610b05578260075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610b6457506004548210155b15610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b90611bf2565b60405180910390fd5b8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610bf091906118c6565b9250508190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015610c605750600860149054906101000a900460ff16155b8015610cd1575060016012600a610c77919061183b565b633b9aca00610c869190611885565b610c909190611c3d565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b15610f1a576001600860146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115610d0d57610d0c6114aa565b5b604051908082528060200260200182016040528015610d3b5781602001602082028036833780820191505090505b50905030815f81518110610d5257610d51611c6d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073430000000000000000000000000000000000000481600181518110610db557610db4611c6d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94760016012600a610e2f919061183b565b633b9aca00610e3e9190611885565b610e489190611c3d565b5f8430426040518663ffffffff1660e01b8152600401610e6c959493929190611d8a565b5f604051808303815f87803b158015610e83575f80fd5b505af1158015610e95573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610efd573d5f803e3d5ffd5b505f600860146101000a81548160ff021916908315150217905550505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610fa3575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611085575f606460075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146110075760035461100b565b6002545b846110169190611885565b6110209190611c3d565b9050808361102e91906118c6565b92508060055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461107c9190611de2565b92505081905550505b8160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546110d19190611de2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611135919061134e565b60405180910390a3600190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561117f578082015181840152602081019050611164565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6111a482611148565b6111ae8185611152565b93506111be818560208601611162565b6111c78161118a565b840191505092915050565b5f6020820190508181035f8301526111ea818461119a565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61122c82611203565b9050919050565b61123c81611222565b8114611246575f80fd5b50565b5f8135905061125781611233565b92915050565b5f819050919050565b61126f8161125d565b8114611279575f80fd5b50565b5f8135905061128a81611266565b92915050565b5f80604083850312156112a6576112a56111fb565b5b5f6112b385828601611249565b92505060206112c48582860161127c565b9150509250929050565b5f8115159050919050565b6112e2816112ce565b82525050565b5f6020820190506112fb5f8301846112d9565b92915050565b5f8060408385031215611317576113166111fb565b5b5f6113248582860161127c565b92505060206113358582860161127c565b9150509250929050565b6113488161125d565b82525050565b5f6020820190506113615f83018461133f565b92915050565b5f805f6060848603121561137e5761137d6111fb565b5b5f61138b86828701611249565b935050602061139c86828701611249565b92505060406113ad8682870161127c565b9150509250925092565b5f60ff82169050919050565b6113cc816113b7565b82525050565b5f6020820190506113e55f8301846113c3565b92915050565b5f60208284031215611400576113ff6111fb565b5b5f61140d8482850161127c565b91505092915050565b5f6020828403121561142b5761142a6111fb565b5b5f61143884828501611249565b91505092915050565b5f61144b82611203565b9050919050565b61145b81611441565b82525050565b5f6020820190506114745f830184611452565b92915050565b61148381611222565b82525050565b5f60208201905061149c5f83018461147a565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114e08261118a565b810181811067ffffffffffffffff821117156114ff576114fe6114aa565b5b80604052505050565b5f6115116111f2565b905061151d82826114d7565b919050565b5f67ffffffffffffffff82111561153c5761153b6114aa565b5b6115458261118a565b9050602081019050919050565b828183375f83830152505050565b5f61157261156d84611522565b611508565b90508281526020810184848401111561158e5761158d6114a6565b5b611599848285611552565b509392505050565b5f82601f8301126115b5576115b46114a2565b5b81356115c5848260208601611560565b91505092915050565b5f80604083850312156115e4576115e36111fb565b5b5f83013567ffffffffffffffff811115611601576116006111ff565b5b61160d858286016115a1565b925050602083013567ffffffffffffffff81111561162e5761162d6111ff565b5b61163a858286016115a1565b9150509250929050565b5f806040838503121561165a576116596111fb565b5b5f61166785828601611249565b925050602061167885828601611249565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806116c657607f821691505b6020821081036116d9576116d8611682565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156117615780860481111561173d5761173c6116df565b5b600185161561174c5780820291505b808102905061175a8561170c565b9450611721565b94509492505050565b5f826117795760019050611834565b81611786575f9050611834565b816001811461179c57600281146117a6576117d5565b6001915050611834565b60ff8411156117b8576117b76116df565b5b8360020a9150848211156117cf576117ce6116df565b5b50611834565b5060208310610133831016604e8410600b841016171561180a5782820a905083811115611805576118046116df565b5b611834565b6118178484846001611718565b9250905081840481111561182e5761182d6116df565b5b81810290505b9392505050565b5f6118458261125d565b9150611850836113b7565b925061187d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461176a565b905092915050565b5f61188f8261125d565b915061189a8361125d565b92508282026118a88161125d565b915082820484148315176118bf576118be6116df565b5b5092915050565b5f6118d08261125d565b91506118db8361125d565b92508282039050818111156118f3576118f26116df565b5b92915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026119557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261191a565b61195f868361191a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61199a6119956119908461125d565b611977565b61125d565b9050919050565b5f819050919050565b6119b383611980565b6119c76119bf826119a1565b848454611926565b825550505050565b5f90565b6119db6119cf565b6119e68184846119aa565b505050565b5b81811015611a09576119fe5f826119d3565b6001810190506119ec565b5050565b601f821115611a4e57611a1f816118f9565b611a288461190b565b81016020851015611a37578190505b611a4b611a438561190b565b8301826119eb565b50505b505050565b5f82821c905092915050565b5f611a6e5f1984600802611a53565b1980831691505092915050565b5f611a868383611a5f565b9150826002028217905092915050565b611a9f82611148565b67ffffffffffffffff811115611ab857611ab76114aa565b5b611ac282546116af565b611acd828285611a0d565b5f60209050601f831160018114611afe575f8415611aec578287015190505b611af68582611a7b565b865550611b5d565b601f198416611b0c866118f9565b5f5b82811015611b3357848901518255600182019150602085019450602081019050611b0e565b86831015611b505784890151611b4c601f891682611a5f565b8355505b6001600288020188555050505b505050505050565b5f6060820190508181035f830152611b7d818661119a565b90508181036020830152611b91818561119a565b9050611ba0604083018461147a565b949350505050565b7f45786365656473206d6178696d756d20627579206c696d6974000000000000005f82015250565b5f611bdc601983611152565b9150611be782611ba8565b602082019050919050565b5f6020820190508181035f830152611c0981611bd0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611c478261125d565b9150611c528361125d565b925082611c6257611c61611c10565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f611cbd611cb8611cb384611c9a565b611977565b61125d565b9050919050565b611ccd81611ca3565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611d0581611222565b82525050565b5f611d168383611cfc565b60208301905092915050565b5f602082019050919050565b5f611d3882611cd3565b611d428185611cdd565b9350611d4d83611ced565b805f5b83811015611d7d578151611d648882611d0b565b9750611d6f83611d22565b925050600181019050611d50565b5085935050505092915050565b5f60a082019050611d9d5f83018861133f565b611daa6020830187611cc4565b8181036040830152611dbc8186611d2e565b9050611dcb606083018561147a565b611dd8608083018461133f565b9695505050505050565b5f611dec8261125d565b9150611df78361125d565b9250828201905080821115611e0f57611e0e6116df565b5b9291505056fea26469706673582212205c1245e02685f98ce6afe73a5ac372d009698d5f8170ca75e60908ea8d948f7364736f6c63430008180033