60806040523480156200001157600080fd5b506040518060400160405280600b81526020017f4275736869646f20496e750000000000000000000000000000000000000000008152506040518060400160405280600781526020017f4255534849444f000000000000000000000000000000000000000000000000008152506009620000a062000094620001bc60201b60201c565b620001c460201b60201c565b8260069081620000b1919062000502565b508160079081620000c3919062000502565b5080600860006101000a81548160ff021916908360ff16021790555050505068056bc75e2d63100000600581905550600554600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000145919062000618565b925050819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600554604051620001ae919062000664565b60405180910390a362000681565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030a57607f821691505b60208210810362000320576200031f620002c2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200038a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200034b565b6200039686836200034b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003e3620003dd620003d784620003ae565b620003b8565b620003ae565b9050919050565b6000819050919050565b620003ff83620003c2565b620004176200040e82620003ea565b84845462000358565b825550505050565b600090565b6200042e6200041f565b6200043b818484620003f4565b505050565b5b8181101562000463576200045760008262000424565b60018101905062000441565b5050565b601f821115620004b2576200047c8162000326565b62000487846200033b565b8101602085101562000497578190505b620004af620004a6856200033b565b83018262000440565b50505b505050565b600082821c905092915050565b6000620004d760001984600802620004b7565b1980831691505092915050565b6000620004f28383620004c4565b9150826002028217905092915050565b6200050d8262000288565b67ffffffffffffffff81111562000529576200052862000293565b5b620005358254620002f1565b6200054282828562000467565b600060209050601f8311600181146200057a576000841562000565578287015190505b620005718582620004e4565b865550620005e1565b601f1984166200058a8662000326565b60005b82811015620005b4578489015182556001820191506020850194506020810190506200058d565b86831015620005d45784890151620005d0601f891682620004c4565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200062582620003ae565b91506200063283620003ae565b92508282019050808211156200064d576200064c620005e9565b5b92915050565b6200065e81620003ae565b82525050565b60006020820190506200067b600083018462000653565b92915050565b61245280620006916000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063a457c2d711610071578063a457c2d71461031f578063a9059cbb1461034f578063c2b7bbb61461037f578063cb2fee751461039b578063dd62ed3e146103cb5761012c565b806370a082311461028d578063715018a6146102bd57806373fa7ddb146102c75780638da5cb5b146102e357806395d89b41146103015761012c565b8063313ce567116100f4578063313ce567146101e9578063395093511461020757806342966c681461023757806349bd5a5e146102535780635c19a95c146102715761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d57806326ededb8146101cd575b600080fd5b6101396103fb565b60405161014691906117e7565b60405180910390f35b610169600480360381019061016491906118a7565b61048d565b6040516101769190611902565b60405180910390f35b6101876104ab565b604051610194919061192c565b60405180910390f35b6101b760048036038101906101b29190611947565b6104b5565b6040516101c49190611902565b60405180910390f35b6101e760048036038101906101e291906119ff565b6105ad565b005b6101f1610713565b6040516101fe9190611a7b565b60405180910390f35b610221600480360381019061021c91906118a7565b61072a565b60405161022e9190611902565b60405180910390f35b610251600480360381019061024c9190611a96565b6107d6565b005b61025b610881565b6040516102689190611ad2565b60405180910390f35b61028b60048036038101906102869190611aed565b6108a7565b005b6102a760048036038101906102a29190611aed565b6109c2565b6040516102b4919061192c565b60405180910390f35b6102c5610a0b565b005b6102e160048036038101906102dc9190611b46565b610a93565b005b6102eb610bc9565b6040516102f89190611ad2565b60405180910390f35b610309610bf2565b60405161031691906117e7565b60405180910390f35b610339600480360381019061033491906118a7565b610c84565b6040516103469190611902565b60405180910390f35b610369600480360381019061036491906118a7565b610d6f565b6040516103769190611902565b60405180910390f35b61039960048036038101906103949190611aed565b610d8d565b005b6103b560048036038101906103b09190611aed565b610e4d565b6040516103c29190611902565b60405180910390f35b6103e560048036038101906103e09190611ba6565b610ea3565b6040516103f2919061192c565b60405180910390f35b60606006805461040a90611c15565b80601f016020809104026020016040519081016040528092919081815260200182805461043690611c15565b80156104835780601f1061045857610100808354040283529160200191610483565b820191906000526020600020905b81548152906001019060200180831161046657829003601f168201915b5050505050905090565b60006104a161049a610f2a565b8484610f32565b6001905092915050565b6000600554905090565b60006104c28484846110fb565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061050d610f2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058490611cb8565b60405180910390fd5b6105a185610599610f2a565b858403610f32565b60019150509392505050565b6105b5610f2a565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063b90611d4a565b60405180910390fd5b60005b8383905081101561070d5783838281811061066557610664611d6a565b5b905060200201602081019061067a9190611aed565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106f8919061192c565b60405180910390a38080600101915050610647565b50505050565b6000600860009054906101000a900460ff16905090565b60006107cc610737610f2a565b848460046000610745610f2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107c79190611dc8565b610f32565b6001905092915050565b6107de610f2a565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461086d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086490611d4a565b60405180910390fd5b61087e610878610f2a565b826113ff565b50565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108af610f2a565b73ffffffffffffffffffffffffffffffffffffffff166108cd610bc9565b73ffffffffffffffffffffffffffffffffffffffff1614610923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091a90611e48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461097e57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a13610f2a565b73ffffffffffffffffffffffffffffffffffffffff16610a31610bc9565b73ffffffffffffffffffffffffffffffffffffffff1614610a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7e90611e48565b60405180910390fd5b610a9160006115a6565b565b610a9b610f2a565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2190611d4a565b60405180910390fd5b60005b83839050811015610bc3578160036000868685818110610b5057610b4f611d6a565b5b9050602002016020810190610b659190611aed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610b2d565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610c0190611c15565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2d90611c15565b8015610c7a5780601f10610c4f57610100808354040283529160200191610c7a565b820191906000526020600020905b815481529060010190602001808311610c5d57829003601f168201915b5050505050905090565b60008060046000610c93610f2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790611eda565b60405180910390fd5b610d64610d5b610f2a565b85858403610f32565b600191505092915050565b6000610d83610d7c610f2a565b84846110fb565b6001905092915050565b610d95610f2a565b73ffffffffffffffffffffffffffffffffffffffff16610db3610bc9565b73ffffffffffffffffffffffffffffffffffffffff1614610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0090611e48565b60405180910390fd5b80600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9890611f6c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100790611ffe565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110ee919061192c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190612090565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d090612122565b60405180910390fd5b60006111e5848361166a565b9050801561127057600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561126f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611266906121b4565b60405180910390fd5b5b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90612246565b60405180910390fd5b828103600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461138c9190611dc8565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516113f0919061192c565b60405180910390a35050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361146e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611465906122d8565b60405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818111156114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec9061236a565b60405180910390fd5b818101600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611599919061192c565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117025760008214611701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f8906123fc565b60405180910390fd5b5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611791578082015181840152602081019050611776565b60008484015250505050565b6000601f19601f8301169050919050565b60006117b982611757565b6117c38185611762565b93506117d3818560208601611773565b6117dc8161179d565b840191505092915050565b6000602082019050818103600083015261180181846117ae565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061183e82611813565b9050919050565b61184e81611833565b811461185957600080fd5b50565b60008135905061186b81611845565b92915050565b6000819050919050565b61188481611871565b811461188f57600080fd5b50565b6000813590506118a18161187b565b92915050565b600080604083850312156118be576118bd611809565b5b60006118cc8582860161185c565b92505060206118dd85828601611892565b9150509250929050565b60008115159050919050565b6118fc816118e7565b82525050565b600060208201905061191760008301846118f3565b92915050565b61192681611871565b82525050565b6000602082019050611941600083018461191d565b92915050565b6000806000606084860312156119605761195f611809565b5b600061196e8682870161185c565b935050602061197f8682870161185c565b925050604061199086828701611892565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126119bf576119be61199a565b5b8235905067ffffffffffffffff8111156119dc576119db61199f565b5b6020830191508360208202830111156119f8576119f76119a4565b5b9250929050565b600080600060408486031215611a1857611a17611809565b5b600084013567ffffffffffffffff811115611a3657611a3561180e565b5b611a42868287016119a9565b93509350506020611a5586828701611892565b9150509250925092565b600060ff82169050919050565b611a7581611a5f565b82525050565b6000602082019050611a906000830184611a6c565b92915050565b600060208284031215611aac57611aab611809565b5b6000611aba84828501611892565b91505092915050565b611acc81611833565b82525050565b6000602082019050611ae76000830184611ac3565b92915050565b600060208284031215611b0357611b02611809565b5b6000611b118482850161185c565b91505092915050565b611b23816118e7565b8114611b2e57600080fd5b50565b600081359050611b4081611b1a565b92915050565b600080600060408486031215611b5f57611b5e611809565b5b600084013567ffffffffffffffff811115611b7d57611b7c61180e565b5b611b89868287016119a9565b93509350506020611b9c86828701611b31565b9150509250925092565b60008060408385031215611bbd57611bbc611809565b5b6000611bcb8582860161185c565b9250506020611bdc8582860161185c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c2d57607f821691505b602082108103611c4057611c3f611be6565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611ca2602883611762565b9150611cad82611c46565b604082019050919050565b60006020820190508181036000830152611cd181611c95565b9050919050565b7f44656c6567617465733a2063616c6c6572206973206e6f74207468652064656c60008201527f6567617465000000000000000000000000000000000000000000000000000000602082015250565b6000611d34602583611762565b9150611d3f82611cd8565b604082019050919050565b60006020820190508181036000830152611d6381611d27565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611dd382611871565b9150611dde83611871565b9250828201905080821115611df657611df5611d99565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611e32602083611762565b9150611e3d82611dfc565b602082019050919050565b60006020820190508181036000830152611e6181611e25565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611ec4602583611762565b9150611ecf82611e68565b604082019050919050565b60006020820190508181036000830152611ef381611eb7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611f56602483611762565b9150611f6182611efa565b604082019050919050565b60006020820190508181036000830152611f8581611f49565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611fe8602283611762565b9150611ff382611f8c565b604082019050919050565b6000602082019050818103600083015261201781611fdb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061207a602583611762565b91506120858261201e565b604082019050919050565b600060208201905081810360008301526120a98161206d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061210c602383611762565b9150612117826120b0565b604082019050919050565b6000602082019050818103600083015261213b816120ff565b9050919050565b7f45524332303a207472616e7366657220616d6f7574206578636565647320626160008201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b600061219e602583611762565b91506121a982612142565b604082019050919050565b600060208201905081810360008301526121cd81612191565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612230602683611762565b915061223b826121d4565b604082019050919050565b6000602082019050818103600083015261225f81612223565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006122c2602183611762565b91506122cd82612266565b604082019050919050565b600060208201905081810360008301526122f1816122b5565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612354602283611762565b915061235f826122f8565b604082019050919050565b6000602082019050818103600083015261238381612347565b9050919050565b7f45524332303a207472616e7366657220616d6f7574206578636565647320616c60008201527f6c6f77616e636500000000000000000000000000000000000000000000000000602082015250565b60006123e6602783611762565b91506123f18261238a565b604082019050919050565b60006020820190508181036000830152612415816123d9565b905091905056fea2646970667358221220d8fbf3bc73210060f062979877f651f2b1f25c63bad4542e2849a3f03dc482ba64736f6c63430008160033