Status for Dolphin Central

Recent events

2017-04-28T06:10:15.097285	{'source': 'logging', 'level': 'INFO', 'msg': 'New GH %s: %s', 'lineno': 147, 'args': "('dolphin-emu/core-developers', 'Armada651,JosJuice,Parlane,phire,magumagu,Sonicadvance1,Tilka,skidau,hrydgard,degasus,delroth,stenzek,linkmauve,leoetlino,lioncash,shuffle2')", 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:10:14.624342	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:10:14.173772	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:10:14.169757	{'source': 'logging', 'level': 'INFO', 'msg': 'Refreshing list of trusted users (from %s/%s)', 'lineno': 132, 'args': "('dolphin-emu', 'core-developers')", 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:06:39.936126	{'source': 'logging', 'level': 'INFO', 'msg': 'New GH %s: %s', 'lineno': 147, 'args': "('dolphin-emu/trusted-developers', 'moncefmechri,PEmu1,randomstuff,Tinob,spycrab,RisingFog,mathieui,delroth,magcius,galop1n,rukai,Buddybenj,aroulin,clinchergt,Phatcat,glennricster,Sintendo,skidau,comex,aldelaro5,degasus,jezze,spxtr,AdmiralCurtiss,sigmabeta,FioraAeterna,BhaaLseN,absolome,iwubcode,leoetlino,meffij,lioncash,Alcaro,Armada651,JosJuice,phire,Sonicadvance1,vladfi1,Tilka,booto,MerryMage,neobrain,hrydgard,hthh,Linktothepast,mmastrac,SeannyM,adamdmoss,Ryanel,rohit-n,cylgom,shuffle2,hdcmeta,kamiyo,Helios747,ligfx,Ziek,jordan-woyak,endrift,kayru,sepalani,NanoByte011,jloehr,EmptyChaos,magumagu,Parlane,RachelBryk,JMC47,Stevoisiak,mahdihijazi,marcan,Orphis,unknownbrackets,Zopieux,mimimi085181,linkmauve,Aestek,mrgreywater,stenzek,archshift,OrN,bentley,LPFaint99')", 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:06:39.449566	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:06:38.957887	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:06:38.440251	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:06:37.966675	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:06:37.962823	{'source': 'logging', 'level': 'INFO', 'msg': 'Refreshing list of trusted users (from %s/%s)', 'lineno': 132, 'args': "('dolphin-emu', 'trusted-developers')", 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:03:32.828356	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:32.826165	{'source': 'logging', 'level': 'INFO', 'msg': "Watched repo 'dolphin-emu/gcdsp-ida' has our hook installed", 'lineno': 196, 'args': '()', 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:03:32.328631	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:31.842028	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:31.841382	{'source': 'logging', 'level': 'INFO', 'msg': "Watched repo 'dolphin-emu/hwtests' has our hook installed", 'lineno': 196, 'args': '()', 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:03:31.351394	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:30.833907	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:30.833277	{'source': 'logging', 'level': 'INFO', 'msg': "Watched repo 'dolphin-emu/www' has our hook installed", 'lineno': 196, 'args': '()', 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:03:30.339164	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:29.821637	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:29.818603	{'source': 'logging', 'level': 'INFO', 'msg': "Watched repo 'dolphin-emu/sadm' has our hook installed", 'lineno': 196, 'args': '()', 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:03:29.353586	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:28.816007	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:28.813802	{'source': 'logging', 'level': 'INFO', 'msg': "Watched repo 'dolphin-emu/redmine' has our hook installed", 'lineno': 196, 'args': '()', 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:03:28.329657	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}

Recent 'build_status' events

2017-04-28T02:09:35.790615	{'source': 'prbuilder', 'pr': 5323, 'url': '', 'pending': False, 'type': 'build_status', 'service': 'default', 'repo': 'dolphin-emu/dolphin', 'description': 'PR not built because ZexaronS is not auto-trusted.', 'success': False, 'shortrev': 'ad0fab', 'hash': 'ad0fab599aacd68ac66e9a4a6c75ce66e8f1a282'}
2017-04-27T20:49:19.618752	{'source': 'buildbot', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org#/builders/7/builds/1061', 'pending': False, 'type': 'build_status', 'service': 'pr-win-dbg-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder pr-win-dbg-x64', 'success': True, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:47:29.138403	{'source': 'buildbot', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org#/builders/20/builds/1062', 'pending': False, 'type': 'build_status', 'service': 'pr-win-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder pr-win-x64', 'success': True, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:47:04.262501	{'source': 'buildbot', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org#/builders/21/builds/1062', 'pending': False, 'type': 'build_status', 'service': 'pr-deb-dbg-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder pr-deb-dbg-x64', 'success': True, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:46:31.848677	{'source': 'buildbot', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org#/builders/33/builds/1060', 'pending': False, 'type': 'build_status', 'service': 'pr-osx-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder pr-osx-x64', 'success': True, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:46:29.902567	{'source': 'buildbot', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org#/builders/22/builds/1062', 'pending': False, 'type': 'build_status', 'service': 'lint', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder lint', 'success': True, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:46:28.143926	{'source': 'buildbot', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org#/builders/8/builds/1078', 'pending': False, 'type': 'build_status', 'service': 'pr-android', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder pr-android', 'success': True, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:46:25.645856	{'source': 'buildbot', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org#/builders/6/builds/1062', 'pending': False, 'type': 'build_status', 'service': 'pr-deb-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder pr-deb-x64', 'success': True, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:46:03.177600	{'source': 'buildbot', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org#/builders/34/builds/1062', 'pending': False, 'type': 'build_status', 'service': 'pr-freebsd-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder pr-freebsd-x64', 'success': True, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:46:01.593012	{'source': 'buildbot', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org#/builders/2/builds/1070', 'pending': False, 'type': 'build_status', 'service': 'pr-ubu-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder pr-ubu-x64', 'success': True, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:45:42.592946	{'source': 'prbuilder', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org/waterfall', 'pending': True, 'type': 'build_status', 'service': 'lint', 'repo': 'dolphin-emu/dolphin', 'description': 'Auto build in progress', 'success': False, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:45:42.106735	{'source': 'prbuilder', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org/waterfall', 'pending': True, 'type': 'build_status', 'service': 'pr-freebsd-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Auto build in progress', 'success': False, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:45:41.590969	{'source': 'prbuilder', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org/waterfall', 'pending': True, 'type': 'build_status', 'service': 'pr-win-dbg-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Auto build in progress', 'success': False, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:45:41.123125	{'source': 'prbuilder', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org/waterfall', 'pending': True, 'type': 'build_status', 'service': 'pr-win-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Auto build in progress', 'success': False, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:45:40.644529	{'source': 'prbuilder', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org/waterfall', 'pending': True, 'type': 'build_status', 'service': 'pr-ubu-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Auto build in progress', 'success': False, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:45:40.153530	{'source': 'prbuilder', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org/waterfall', 'pending': True, 'type': 'build_status', 'service': 'pr-osx-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Auto build in progress', 'success': False, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:45:39.646700	{'source': 'prbuilder', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org/waterfall', 'pending': True, 'type': 'build_status', 'service': 'pr-deb-dbg-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Auto build in progress', 'success': False, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:45:39.139688	{'source': 'prbuilder', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org/waterfall', 'pending': True, 'type': 'build_status', 'service': 'pr-deb-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Auto build in progress', 'success': False, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:45:38.660220	{'source': 'prbuilder', 'pr': 5332, 'url': 'https://buildbot.dolphin-emu.org/waterfall', 'pending': True, 'type': 'build_status', 'service': 'pr-android', 'repo': 'dolphin-emu/dolphin', 'description': 'Auto build in progress', 'success': False, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:45:38.148750	{'source': 'prbuilder', 'pr': 5332, 'url': '', 'pending': False, 'type': 'build_status', 'service': 'default', 'repo': 'dolphin-emu/dolphin', 'description': 'Very basic checks passed, handed off to Buildbot.', 'success': True, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:41:55.528451	{'source': 'buildbot', 'pr': 5333, 'url': 'https://buildbot.dolphin-emu.org#/builders/7/builds/1060', 'pending': False, 'type': 'build_status', 'service': 'pr-win-dbg-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder pr-win-dbg-x64', 'success': True, 'shortrev': '4213ea', 'hash': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575'}
2017-04-27T20:40:18.779657	{'source': 'buildbot', 'pr': 5333, 'url': 'https://buildbot.dolphin-emu.org#/builders/7/builds/1059', 'pending': False, 'type': 'build_status', 'service': 'pr-win-dbg-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder pr-win-dbg-x64', 'success': True, 'shortrev': '1137b5', 'hash': '1137b57947a6f9f5fe5afbcbc4138f77bed96042'}
2017-04-27T20:38:44.018158	{'source': 'prbuilder', 'pr': 5332, 'url': '', 'pending': False, 'type': 'build_status', 'service': 'default', 'repo': 'dolphin-emu/dolphin', 'description': 'PR not built because spycrab is not auto-trusted.', 'success': False, 'shortrev': '79ef82', 'hash': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:38:33.429477	{'source': 'buildbot', 'pr': 5333, 'url': 'https://buildbot.dolphin-emu.org#/builders/20/builds/1061', 'pending': False, 'type': 'build_status', 'service': 'pr-win-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder pr-win-x64', 'success': True, 'shortrev': '4213ea', 'hash': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575'}
2017-04-27T20:38:17.850241	{'source': 'buildbot', 'pr': 5333, 'url': 'https://buildbot.dolphin-emu.org#/builders/21/builds/1061', 'pending': False, 'type': 'build_status', 'service': 'pr-deb-dbg-x64', 'repo': 'dolphin-emu/dolphin', 'description': 'Build succeeded on builder pr-deb-dbg-x64', 'success': True, 'shortrev': '4213ea', 'hash': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575'}

Recent 'gh_commit_comment' events

2017-04-06T04:02:11.078111	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/commit/3bd184a255753b0d6a8b645a6035f90a8228e404#commitcomment-21649962', 'author': 'stenzek', 'repo': 'dolphin-emu/dolphin', 'commit': '3bd184a255753b0d6a8b645a6035f90a8228e404', 'type': 'gh_commit_comment'}
2017-04-05T18:31:52.226538	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/commit/3bd184a255753b0d6a8b645a6035f90a8228e404#commitcomment-21643107', 'author': 'KrossX', 'repo': 'dolphin-emu/dolphin', 'commit': '3bd184a255753b0d6a8b645a6035f90a8228e404', 'type': 'gh_commit_comment'}

Recent 'gh_issue_comment' events

2017-04-28T05:22:23.369736	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5331#issuecomment-297909690', 'author': 'MayImilae', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': False, 'action': 'created', 'id': 5331, 'title': '[Android] Fix game banners', 'body': '@mahdihijazi Is it possible that since the old code converted it to integers, it caused an endian swap which changed the colors?', 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/MayImilae/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6551020?v=3', 'url': 'https://api.github.com/users/MayImilae', 'followers_url': 'https://api.github.com/users/MayImilae/followers', 'gists_url': 'https://api.github.com/users/MayImilae/gists{/gist_id}', 'type': 'User', 'id': 6551020, 'subscriptions_url': 'https://api.github.com/users/MayImilae/subscriptions', 'received_events_url': 'https://api.github.com/users/MayImilae/received_events', 'login': 'MayImilae', 'html_url': 'https://github.com/MayImilae', 'repos_url': 'https://api.github.com/users/MayImilae/repos', 'starred_url': 'https://api.github.com/users/MayImilae/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/MayImilae/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/MayImilae/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5331.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5331.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5331', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5331'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/mahdihijazi/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/836892?v=3', 'url': 'https://api.github.com/users/mahdihijazi', 'followers_url': 'https://api.github.com/users/mahdihijazi/followers', 'gists_url': 'https://api.github.com/users/mahdihijazi/gists{/gist_id}', 'type': 'User', 'id': 836892, 'subscriptions_url': 'https://api.github.com/users/mahdihijazi/subscriptions', 'received_events_url': 'https://api.github.com/users/mahdihijazi/received_events', 'login': 'mahdihijazi', 'html_url': 'https://github.com/mahdihijazi', 'repos_url': 'https://api.github.com/users/mahdihijazi/repos', 'starred_url': 'https://api.github.com/users/mahdihijazi/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/mahdihijazi/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/mahdihijazi/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331', 'labels': [], 'number': 5331, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331/comments', 'updated_at': '2017-04-28T05:22:22Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5331', 'locked': False, 'comments': 2, 'title': '[Android] Fix game banners', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331/labels{/name}', 'created_at': '2017-04-27T18:42:38Z', 'assignee': None, 'body': 'Use Bitmap.setPixels() instead of Bitmap.copyPixelsFromBuffer() the former\r\nuse non pre-multiplied values of the colors which is what we expect to\r\ncome from the native code.', 'state': 'closed', 'closed_at': '2017-04-27T18:59:24Z', 'id': 224876522, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3275, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-28T00:15:00Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-28T02:09:34Z', 'watchers_count': 3275, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3275, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334126, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/MayImilae/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6551020?v=3', 'url': 'https://api.github.com/users/MayImilae', 'followers_url': 'https://api.github.com/users/MayImilae/followers', 'gists_url': 'https://api.github.com/users/MayImilae/gists{/gist_id}', 'type': 'User', 'id': 6551020, 'subscriptions_url': 'https://api.github.com/users/MayImilae/subscriptions', 'received_events_url': 'https://api.github.com/users/MayImilae/received_events', 'login': 'MayImilae', 'html_url': 'https://github.com/MayImilae', 'repos_url': 'https://api.github.com/users/MayImilae/repos', 'starred_url': 'https://api.github.com/users/MayImilae/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/MayImilae/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/MayImilae/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297909690', 'updated_at': '2017-04-28T05:22:22Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5331#issuecomment-297909690', 'id': 297909690, 'created_at': '2017-04-28T05:22:22Z', 'body': '@mahdihijazi Is it possible that since the old code converted it to integers, it caused an endian swap which changed the colors?'}}}
2017-04-28T04:18:07.753027	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5322#issuecomment-297903223', 'author': 'Parlane', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'edited', 'id': 5322, 'title': 'FifoPlayer: replace union structures with explicit byte padding', 'body': 'You never mention why it matters?', 'raw': {'action': 'edited', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Parlane/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/86614?v=3', 'url': 'https://api.github.com/users/Parlane', 'followers_url': 'https://api.github.com/users/Parlane/followers', 'gists_url': 'https://api.github.com/users/Parlane/gists{/gist_id}', 'type': 'User', 'id': 86614, 'subscriptions_url': 'https://api.github.com/users/Parlane/subscriptions', 'received_events_url': 'https://api.github.com/users/Parlane/received_events', 'login': 'Parlane', 'html_url': 'https://github.com/Parlane', 'repos_url': 'https://api.github.com/users/Parlane/repos', 'starred_url': 'https://api.github.com/users/Parlane/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Parlane/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Parlane/events{/privacy}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3275, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-28T00:15:00Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-28T02:09:34Z', 'watchers_count': 3275, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3275, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334126, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5322', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Parlane/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/86614?v=3', 'url': 'https://api.github.com/users/Parlane', 'followers_url': 'https://api.github.com/users/Parlane/followers', 'gists_url': 'https://api.github.com/users/Parlane/gists{/gist_id}', 'type': 'User', 'id': 86614, 'subscriptions_url': 'https://api.github.com/users/Parlane/subscriptions', 'received_events_url': 'https://api.github.com/users/Parlane/received_events', 'login': 'Parlane', 'html_url': 'https://github.com/Parlane', 'repos_url': 'https://api.github.com/users/Parlane/repos', 'starred_url': 'https://api.github.com/users/Parlane/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Parlane/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Parlane/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297903223', 'updated_at': '2017-04-28T04:17:17Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5322#issuecomment-297903223', 'id': 297903223, 'created_at': '2017-04-28T04:17:17Z', 'body': 'You never mention why it matters?'}, 'changes': {'body': {'from': 'You never mention why it matters?'}}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5322.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5322.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5322', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5322'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/ligfx/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/594093?v=3', 'url': 'https://api.github.com/users/ligfx', 'followers_url': 'https://api.github.com/users/ligfx/followers', 'gists_url': 'https://api.github.com/users/ligfx/gists{/gist_id}', 'type': 'User', 'id': 594093, 'subscriptions_url': 'https://api.github.com/users/ligfx/subscriptions', 'received_events_url': 'https://api.github.com/users/ligfx/received_events', 'login': 'ligfx', 'html_url': 'https://github.com/ligfx', 'repos_url': 'https://api.github.com/users/ligfx/repos', 'starred_url': 'https://api.github.com/users/ligfx/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/ligfx/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/ligfx/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5322', 'labels': [], 'number': 5322, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5322/comments', 'updated_at': '2017-04-28T04:18:07Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5322', 'locked': False, 'comments': 1, 'title': 'FifoPlayer: replace union structures with explicit byte padding', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5322/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5322/labels{/name}', 'created_at': '2017-04-26T00:37:08Z', 'assignee': None, 'body': '', 'state': 'open', 'closed_at': None, 'id': 224310862, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}}}
2017-04-28T04:17:18.123202	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5322#issuecomment-297903223', 'author': 'Parlane', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'created', 'id': 5322, 'title': 'FifoPlayer: replace union structures with explicit byte padding', 'body': 'You never mention why it matters?', 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Parlane/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/86614?v=3', 'url': 'https://api.github.com/users/Parlane', 'followers_url': 'https://api.github.com/users/Parlane/followers', 'gists_url': 'https://api.github.com/users/Parlane/gists{/gist_id}', 'type': 'User', 'id': 86614, 'subscriptions_url': 'https://api.github.com/users/Parlane/subscriptions', 'received_events_url': 'https://api.github.com/users/Parlane/received_events', 'login': 'Parlane', 'html_url': 'https://github.com/Parlane', 'repos_url': 'https://api.github.com/users/Parlane/repos', 'starred_url': 'https://api.github.com/users/Parlane/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Parlane/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Parlane/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5322.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5322.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5322', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5322'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/ligfx/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/594093?v=3', 'url': 'https://api.github.com/users/ligfx', 'followers_url': 'https://api.github.com/users/ligfx/followers', 'gists_url': 'https://api.github.com/users/ligfx/gists{/gist_id}', 'type': 'User', 'id': 594093, 'subscriptions_url': 'https://api.github.com/users/ligfx/subscriptions', 'received_events_url': 'https://api.github.com/users/ligfx/received_events', 'login': 'ligfx', 'html_url': 'https://github.com/ligfx', 'repos_url': 'https://api.github.com/users/ligfx/repos', 'starred_url': 'https://api.github.com/users/ligfx/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/ligfx/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/ligfx/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5322', 'labels': [], 'number': 5322, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5322/comments', 'updated_at': '2017-04-28T04:17:17Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5322', 'locked': False, 'comments': 0, 'title': 'FifoPlayer: replace union structures with explicit byte padding', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5322/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5322/labels{/name}', 'created_at': '2017-04-26T00:37:08Z', 'assignee': None, 'body': '', 'state': 'open', 'closed_at': None, 'id': 224310862, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3275, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-28T00:15:00Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-28T02:09:34Z', 'watchers_count': 3275, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3275, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334126, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5322', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Parlane/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/86614?v=3', 'url': 'https://api.github.com/users/Parlane', 'followers_url': 'https://api.github.com/users/Parlane/followers', 'gists_url': 'https://api.github.com/users/Parlane/gists{/gist_id}', 'type': 'User', 'id': 86614, 'subscriptions_url': 'https://api.github.com/users/Parlane/subscriptions', 'received_events_url': 'https://api.github.com/users/Parlane/received_events', 'login': 'Parlane', 'html_url': 'https://github.com/Parlane', 'repos_url': 'https://api.github.com/users/Parlane/repos', 'starred_url': 'https://api.github.com/users/Parlane/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Parlane/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Parlane/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297903223', 'updated_at': '2017-04-28T04:17:17Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5322#issuecomment-297903223', 'id': 297903223, 'created_at': '2017-04-28T04:17:17Z', 'body': 'You never mention why it matters?'}}}
2017-04-28T01:32:29.860954	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5283#issuecomment-297883480', 'author': 'MayImilae', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': False, 'action': 'created', 'id': 5283, 'title': 'Make ENABLE_ANALYTICS=0 do something (Issue #9622)', 'body': 'I still recommend waiting for @delroth to check this before merging, just to be safe.', 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/MayImilae/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6551020?v=3', 'url': 'https://api.github.com/users/MayImilae', 'followers_url': 'https://api.github.com/users/MayImilae/followers', 'gists_url': 'https://api.github.com/users/MayImilae/gists{/gist_id}', 'type': 'User', 'id': 6551020, 'subscriptions_url': 'https://api.github.com/users/MayImilae/subscriptions', 'received_events_url': 'https://api.github.com/users/MayImilae/received_events', 'login': 'MayImilae', 'html_url': 'https://github.com/MayImilae', 'repos_url': 'https://api.github.com/users/MayImilae/repos', 'starred_url': 'https://api.github.com/users/MayImilae/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/MayImilae/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/MayImilae/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5283.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5283.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5283', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5283'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/spycrab/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1440715?v=3', 'url': 'https://api.github.com/users/spycrab', 'followers_url': 'https://api.github.com/users/spycrab/followers', 'gists_url': 'https://api.github.com/users/spycrab/gists{/gist_id}', 'type': 'User', 'id': 1440715, 'subscriptions_url': 'https://api.github.com/users/spycrab/subscriptions', 'received_events_url': 'https://api.github.com/users/spycrab/received_events', 'login': 'spycrab', 'html_url': 'https://github.com/spycrab', 'repos_url': 'https://api.github.com/users/spycrab/repos', 'starred_url': 'https://api.github.com/users/spycrab/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/spycrab/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/spycrab/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5283', 'labels': [], 'number': 5283, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5283/comments', 'updated_at': '2017-04-28T01:32:29Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5283', 'locked': False, 'comments': 5, 'title': 'Make ENABLE_ANALYTICS=0 do something (Issue #9622)', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5283/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5283/labels{/name}', 'created_at': '2017-04-17T12:52:30Z', 'assignee': None, 'body': 'Disables analytics and removes the Analytics Reporting Section from the General Config Tab if ENABLE_ANALYTICS is OFF.\r\n\r\nSee [Issue #9622](https://bugs.dolphin-emu.org/issues/9622).', 'state': 'open', 'closed_at': None, 'id': 222127056, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3275, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-28T00:15:00Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T20:38:43Z', 'watchers_count': 3275, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3275, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334126, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5283', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/MayImilae/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6551020?v=3', 'url': 'https://api.github.com/users/MayImilae', 'followers_url': 'https://api.github.com/users/MayImilae/followers', 'gists_url': 'https://api.github.com/users/MayImilae/gists{/gist_id}', 'type': 'User', 'id': 6551020, 'subscriptions_url': 'https://api.github.com/users/MayImilae/subscriptions', 'received_events_url': 'https://api.github.com/users/MayImilae/received_events', 'login': 'MayImilae', 'html_url': 'https://github.com/MayImilae', 'repos_url': 'https://api.github.com/users/MayImilae/repos', 'starred_url': 'https://api.github.com/users/MayImilae/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/MayImilae/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/MayImilae/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297883480', 'updated_at': '2017-04-28T01:32:29Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5283#issuecomment-297883480', 'id': 297883480, 'created_at': '2017-04-28T01:32:29Z', 'body': 'I still recommend waiting for @delroth to check this before merging, just to be safe.'}}}
2017-04-27T21:06:59.304109	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5331#issuecomment-297839595', 'author': 'mahdihijazi', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'created', 'id': 5331, 'title': '[Android] Fix game banners', 'body': "@JosJuice me too, I think I am missing something because according to the docs [setPixels](https://goo.gl/ad67NV) should work similar to [copyPixelsFromBuffer](https://developer.android.com/reference/android/graphics/Bitmap.html#copyPixelsFromBuffer(java.nio.Buffer)) except for the multiplication thing, and I did the multiplication manually and tried copyPixelsFromBuffer on the multiplied values and it didn't work.\r\nCalling setPixels resulted in setting the correct colors for reason I am not sure about. I think some internal behavior of those methods is no clear in the docs. The only thing that is clear is that setPixels suppose to work with the non premultiplied values which should not matter since we have 0xFF alpha!\r\n\r\n\r\n", 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/mahdihijazi/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/836892?v=3', 'url': 'https://api.github.com/users/mahdihijazi', 'followers_url': 'https://api.github.com/users/mahdihijazi/followers', 'gists_url': 'https://api.github.com/users/mahdihijazi/gists{/gist_id}', 'type': 'User', 'id': 836892, 'subscriptions_url': 'https://api.github.com/users/mahdihijazi/subscriptions', 'received_events_url': 'https://api.github.com/users/mahdihijazi/received_events', 'login': 'mahdihijazi', 'html_url': 'https://github.com/mahdihijazi', 'repos_url': 'https://api.github.com/users/mahdihijazi/repos', 'starred_url': 'https://api.github.com/users/mahdihijazi/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/mahdihijazi/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/mahdihijazi/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5331.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5331.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5331', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5331'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/mahdihijazi/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/836892?v=3', 'url': 'https://api.github.com/users/mahdihijazi', 'followers_url': 'https://api.github.com/users/mahdihijazi/followers', 'gists_url': 'https://api.github.com/users/mahdihijazi/gists{/gist_id}', 'type': 'User', 'id': 836892, 'subscriptions_url': 'https://api.github.com/users/mahdihijazi/subscriptions', 'received_events_url': 'https://api.github.com/users/mahdihijazi/received_events', 'login': 'mahdihijazi', 'html_url': 'https://github.com/mahdihijazi', 'repos_url': 'https://api.github.com/users/mahdihijazi/repos', 'starred_url': 'https://api.github.com/users/mahdihijazi/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/mahdihijazi/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/mahdihijazi/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331', 'labels': [], 'number': 5331, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331/comments', 'updated_at': '2017-04-27T21:06:58Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5331', 'locked': False, 'comments': 1, 'title': '[Android] Fix game banners', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331/labels{/name}', 'created_at': '2017-04-27T18:42:38Z', 'assignee': None, 'body': 'Use Bitmap.setPixels() instead of Bitmap.copyPixelsFromBuffer() the former\r\nuse non pre-multiplied values of the colors which is what we expect to\r\ncome from the native code.', 'state': 'closed', 'closed_at': '2017-04-27T18:59:24Z', 'id': 224876522, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3274, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T20:04:14Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T20:38:43Z', 'watchers_count': 3274, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3274, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334126, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/mahdihijazi/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/836892?v=3', 'url': 'https://api.github.com/users/mahdihijazi', 'followers_url': 'https://api.github.com/users/mahdihijazi/followers', 'gists_url': 'https://api.github.com/users/mahdihijazi/gists{/gist_id}', 'type': 'User', 'id': 836892, 'subscriptions_url': 'https://api.github.com/users/mahdihijazi/subscriptions', 'received_events_url': 'https://api.github.com/users/mahdihijazi/received_events', 'login': 'mahdihijazi', 'html_url': 'https://github.com/mahdihijazi', 'repos_url': 'https://api.github.com/users/mahdihijazi/repos', 'starred_url': 'https://api.github.com/users/mahdihijazi/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/mahdihijazi/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/mahdihijazi/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297839595', 'updated_at': '2017-04-27T21:06:58Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5331#issuecomment-297839595', 'id': 297839595, 'created_at': '2017-04-27T21:06:58Z', 'body': "@JosJuice me too, I think I am missing something because according to the docs [setPixels](https://goo.gl/ad67NV) should work similar to [copyPixelsFromBuffer](https://developer.android.com/reference/android/graphics/Bitmap.html#copyPixelsFromBuffer(java.nio.Buffer)) except for the multiplication thing, and I did the multiplication manually and tried copyPixelsFromBuffer on the multiplied values and it didn't work.\r\nCalling setPixels resulted in setting the correct colors for reason I am not sure about. I think some internal behavior of those methods is no clear in the docs. The only thing that is clear is that setPixels suppose to work with the non premultiplied values which should not matter since we have 0xFF alpha!\r\n\r\n\r\n"}}}
2017-04-27T20:40:09.560368	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332#issuecomment-297832878', 'author': 'spycrab', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': False, 'action': 'created', 'id': 5332, 'title': 'Remove C-style casts and const abuse in Wiimote* code', 'body': "@lioncash I'm considering implementing this in a later PR.", 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/spycrab/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1440715?v=3', 'url': 'https://api.github.com/users/spycrab', 'followers_url': 'https://api.github.com/users/spycrab/followers', 'gists_url': 'https://api.github.com/users/spycrab/gists{/gist_id}', 'type': 'User', 'id': 1440715, 'subscriptions_url': 'https://api.github.com/users/spycrab/subscriptions', 'received_events_url': 'https://api.github.com/users/spycrab/received_events', 'login': 'spycrab', 'html_url': 'https://github.com/spycrab', 'repos_url': 'https://api.github.com/users/spycrab/repos', 'starred_url': 'https://api.github.com/users/spycrab/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/spycrab/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/spycrab/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5332.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5332.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/spycrab/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1440715?v=3', 'url': 'https://api.github.com/users/spycrab', 'followers_url': 'https://api.github.com/users/spycrab/followers', 'gists_url': 'https://api.github.com/users/spycrab/gists{/gist_id}', 'type': 'User', 'id': 1440715, 'subscriptions_url': 'https://api.github.com/users/spycrab/subscriptions', 'received_events_url': 'https://api.github.com/users/spycrab/received_events', 'login': 'spycrab', 'html_url': 'https://github.com/spycrab', 'repos_url': 'https://api.github.com/users/spycrab/repos', 'starred_url': 'https://api.github.com/users/spycrab/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/spycrab/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/spycrab/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332', 'labels': [], 'number': 5332, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332/comments', 'updated_at': '2017-04-27T20:40:08Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332', 'locked': False, 'comments': 2, 'title': 'Remove C-style casts and const abuse in Wiimote* code', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332/labels{/name}', 'created_at': '2017-04-27T19:22:56Z', 'assignee': None, 'body': 'Part 2 of my attempt to clean up the Wiimote code somewhat.\r\n\r\nI tried to preserve most of the const qualifiers where possible but sometimes the const was simply cast aside without any warning due to the nature of C-Casts', 'state': 'open', 'closed_at': None, 'id': 224887339, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3274, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T20:04:14Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T20:38:43Z', 'watchers_count': 3274, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3274, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334126, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/spycrab/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1440715?v=3', 'url': 'https://api.github.com/users/spycrab', 'followers_url': 'https://api.github.com/users/spycrab/followers', 'gists_url': 'https://api.github.com/users/spycrab/gists{/gist_id}', 'type': 'User', 'id': 1440715, 'subscriptions_url': 'https://api.github.com/users/spycrab/subscriptions', 'received_events_url': 'https://api.github.com/users/spycrab/received_events', 'login': 'spycrab', 'html_url': 'https://github.com/spycrab', 'repos_url': 'https://api.github.com/users/spycrab/repos', 'starred_url': 'https://api.github.com/users/spycrab/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/spycrab/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/spycrab/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297832878', 'updated_at': '2017-04-27T20:40:08Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#issuecomment-297832878', 'id': 297832878, 'created_at': '2017-04-27T20:40:08Z', 'body': "@lioncash I'm considering implementing this in a later PR."}}}
2017-04-27T19:58:50.308643	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332#issuecomment-297822545', 'author': 'spycrab', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': False, 'action': 'created', 'id': 5332, 'title': 'Remove C-style casts and const abuse in Wiimote* code', 'body': "@BhaaLseN \r\n```\r\nMost of those const removals look like they shouldn't have happened to me; like something else is wrong that requires them to be removed. Might be wrong tho, still having a hard time with const correctness etc.\r\n```\r\n\r\nThat might be true. Although I'm quite certain that some const removals I did are unavoidable without a ``conv_cast`` and that's something I'd like to avoid.\r\n\r\n```\r\nBut since you're on a cleanup spree, do you intend to correct the local/variable naming (style, reserved underscore, etc) somewhere as well?\r\n```\r\nWhat do you mean exactly? Could you provide some examples?\r\n\r\nThanks for your Feedback", 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/spycrab/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1440715?v=3', 'url': 'https://api.github.com/users/spycrab', 'followers_url': 'https://api.github.com/users/spycrab/followers', 'gists_url': 'https://api.github.com/users/spycrab/gists{/gist_id}', 'type': 'User', 'id': 1440715, 'subscriptions_url': 'https://api.github.com/users/spycrab/subscriptions', 'received_events_url': 'https://api.github.com/users/spycrab/received_events', 'login': 'spycrab', 'html_url': 'https://github.com/spycrab', 'repos_url': 'https://api.github.com/users/spycrab/repos', 'starred_url': 'https://api.github.com/users/spycrab/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/spycrab/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/spycrab/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5332.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5332.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/spycrab/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1440715?v=3', 'url': 'https://api.github.com/users/spycrab', 'followers_url': 'https://api.github.com/users/spycrab/followers', 'gists_url': 'https://api.github.com/users/spycrab/gists{/gist_id}', 'type': 'User', 'id': 1440715, 'subscriptions_url': 'https://api.github.com/users/spycrab/subscriptions', 'received_events_url': 'https://api.github.com/users/spycrab/received_events', 'login': 'spycrab', 'html_url': 'https://github.com/spycrab', 'repos_url': 'https://api.github.com/users/spycrab/repos', 'starred_url': 'https://api.github.com/users/spycrab/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/spycrab/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/spycrab/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332', 'labels': [], 'number': 5332, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332/comments', 'updated_at': '2017-04-27T19:58:49Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332', 'locked': False, 'comments': 1, 'title': 'Remove C-style casts and const abuse in Wiimote* code', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332/labels{/name}', 'created_at': '2017-04-27T19:22:56Z', 'assignee': None, 'body': 'Part 2 of my attempt to clean up the Wiimote code somewhat.\r\n\r\nI tried to preserve most of the const qualifiers where possible but sometimes the const was simply cast aside without any warning due to the nature of C-Casts', 'state': 'open', 'closed_at': None, 'id': 224887339, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3273, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T18:20:53Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T19:54:23Z', 'watchers_count': 3273, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3273, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334080, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/spycrab/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1440715?v=3', 'url': 'https://api.github.com/users/spycrab', 'followers_url': 'https://api.github.com/users/spycrab/followers', 'gists_url': 'https://api.github.com/users/spycrab/gists{/gist_id}', 'type': 'User', 'id': 1440715, 'subscriptions_url': 'https://api.github.com/users/spycrab/subscriptions', 'received_events_url': 'https://api.github.com/users/spycrab/received_events', 'login': 'spycrab', 'html_url': 'https://github.com/spycrab', 'repos_url': 'https://api.github.com/users/spycrab/repos', 'starred_url': 'https://api.github.com/users/spycrab/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/spycrab/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/spycrab/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297822545', 'updated_at': '2017-04-27T19:58:49Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#issuecomment-297822545', 'id': 297822545, 'created_at': '2017-04-27T19:58:49Z', 'body': "@BhaaLseN \r\n```\r\nMost of those const removals look like they shouldn't have happened to me; like something else is wrong that requires them to be removed. Might be wrong tho, still having a hard time with const correctness etc.\r\n```\r\n\r\nThat might be true. Although I'm quite certain that some const removals I did are unavoidable without a ``conv_cast`` and that's something I'd like to avoid.\r\n\r\n```\r\nBut since you're on a cleanup spree, do you intend to correct the local/variable naming (style, reserved underscore, etc) somewhere as well?\r\n```\r\nWhat do you mean exactly? Could you provide some examples?\r\n\r\nThanks for your Feedback"}}}
2017-04-27T19:51:55.643170	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332#issuecomment-297820818', 'author': 'BhaaLseN', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'created', 'id': 5332, 'title': 'Remove C-style casts and const abuse in Wiimote* code', 'body': "Most of those `const` removals look like they shouldn't have happened to me; like something else is wrong that requires them to be removed. Might be wrong tho, still having a hard time with const correctness etc.\r\n\r\nBut since you're on a cleanup spree, do you intend to correct the local/variable naming (style, reserved underscore, etc) somewhere as well?", 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/BhaaLseN/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/826052?v=3', 'url': 'https://api.github.com/users/BhaaLseN', 'followers_url': 'https://api.github.com/users/BhaaLseN/followers', 'gists_url': 'https://api.github.com/users/BhaaLseN/gists{/gist_id}', 'type': 'User', 'id': 826052, 'subscriptions_url': 'https://api.github.com/users/BhaaLseN/subscriptions', 'received_events_url': 'https://api.github.com/users/BhaaLseN/received_events', 'login': 'BhaaLseN', 'html_url': 'https://github.com/BhaaLseN', 'repos_url': 'https://api.github.com/users/BhaaLseN/repos', 'starred_url': 'https://api.github.com/users/BhaaLseN/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/BhaaLseN/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/BhaaLseN/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5332.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5332.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/spycrab/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1440715?v=3', 'url': 'https://api.github.com/users/spycrab', 'followers_url': 'https://api.github.com/users/spycrab/followers', 'gists_url': 'https://api.github.com/users/spycrab/gists{/gist_id}', 'type': 'User', 'id': 1440715, 'subscriptions_url': 'https://api.github.com/users/spycrab/subscriptions', 'received_events_url': 'https://api.github.com/users/spycrab/received_events', 'login': 'spycrab', 'html_url': 'https://github.com/spycrab', 'repos_url': 'https://api.github.com/users/spycrab/repos', 'starred_url': 'https://api.github.com/users/spycrab/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/spycrab/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/spycrab/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332', 'labels': [], 'number': 5332, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332/comments', 'updated_at': '2017-04-27T19:51:54Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332', 'locked': False, 'comments': 0, 'title': 'Remove C-style casts and const abuse in Wiimote* code', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332/labels{/name}', 'created_at': '2017-04-27T19:22:56Z', 'assignee': None, 'body': 'Part 2 of my attempt to clean up the Wiimote code somewhat.\r\n\r\nI tried to preserve most of the const qualifiers where possible but sometimes the const was simply cast aside without any warning due to the nature of C-Casts', 'state': 'open', 'closed_at': None, 'id': 224887339, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 160, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3273, 'open_issues_count': 160, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T18:20:53Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T19:22:57Z', 'watchers_count': 3273, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3273, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334080, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5332', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/BhaaLseN/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/826052?v=3', 'url': 'https://api.github.com/users/BhaaLseN', 'followers_url': 'https://api.github.com/users/BhaaLseN/followers', 'gists_url': 'https://api.github.com/users/BhaaLseN/gists{/gist_id}', 'type': 'User', 'id': 826052, 'subscriptions_url': 'https://api.github.com/users/BhaaLseN/subscriptions', 'received_events_url': 'https://api.github.com/users/BhaaLseN/received_events', 'login': 'BhaaLseN', 'html_url': 'https://github.com/BhaaLseN', 'repos_url': 'https://api.github.com/users/BhaaLseN/repos', 'starred_url': 'https://api.github.com/users/BhaaLseN/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/BhaaLseN/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/BhaaLseN/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297820818', 'updated_at': '2017-04-27T19:51:54Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#issuecomment-297820818', 'id': 297820818, 'created_at': '2017-04-27T19:51:54Z', 'body': "Most of those `const` removals look like they shouldn't have happened to me; like something else is wrong that requires them to be removed. Might be wrong tho, still having a hard time with const correctness etc.\r\n\r\nBut since you're on a cleanup spree, do you intend to correct the local/variable naming (style, reserved underscore, etc) somewhere as well?"}}}
2017-04-27T19:04:24.396567	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5308#issuecomment-297626406', 'author': 'JosJuice', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'edited', 'id': 5308, 'title': 'Revert "[Android] Load the game banner from the ROM and use it if no screenshot is available"', 'body': "I'm going to merge this revert in four days unless someone disagrees or there's progress on fixing the crash.", 'raw': {'action': 'edited', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'repository': {'has_projects': False, 'open_issues': 159, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3273, 'open_issues_count': 159, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T18:20:53Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T18:59:24Z', 'watchers_count': 3273, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3273, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334080, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5308', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297626406', 'updated_at': '2017-04-27T06:44:48Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5308#issuecomment-297626406', 'id': 297626406, 'created_at': '2017-04-27T06:44:48Z', 'body': "I'm going to merge this revert in four days unless someone disagrees or there's progress on fixing the crash."}, 'changes': {'body': {'from': "I'm going to merge this revert in four days unless someone disagrees or there's progress on fixing the crash."}}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5308.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5308.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5308', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5308'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5308', 'labels': [], 'number': 5308, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5308/comments', 'updated_at': '2017-04-27T06:44:48Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5308', 'locked': False, 'comments': 3, 'title': 'Revert "[Android] Load the game banner from the ROM and use it if no screenshot is available"', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5308/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5308/labels{/name}', 'created_at': '2017-04-23T13:19:43Z', 'assignee': None, 'body': 'This reverts PR #5118.\r\n.\r\nWe have gotten reports of it making Dolphin crash when there are non-GC games in the TV UI. Also, the banner colors seem to be wrong. See https://github.com/dolphin-emu/dolphin/pull/5118#issuecomment-296382435 for details.', 'state': 'open', 'closed_at': None, 'id': 223635391, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}}}
2017-04-27T19:01:41.905560	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5265#issuecomment-297808601', 'author': 'JosJuice', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'created', 'id': 5265, 'title': 'Fix banners on Android being the wrong color', 'body': "PR #5331 fixed the colors (in some way I don't fully understand), so I'm closing this PR.", 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5265.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5265.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5265', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5265'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5265', 'labels': [], 'number': 5265, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5265/comments', 'updated_at': '2017-04-27T19:01:41Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5265', 'locked': False, 'comments': 4, 'title': 'Fix banners on Android being the wrong color', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5265/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5265/labels{/name}', 'created_at': '2017-04-14T18:44:01Z', 'assignee': None, 'body': 'I noticed that the color of the banner of the only game I had on my phone (Animal Crossing) was wrong, so I tried to fix it and arrived at this PR by trial and error. Should this really be necessary, though?\r\n\r\n@mahdihijazi, what do you think? Does it sound right that Picasso wants ABGR?', 'state': 'closed', 'closed_at': '2017-04-27T19:01:40Z', 'id': 221866598, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 159, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3273, 'open_issues_count': 159, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T18:20:53Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T18:59:24Z', 'watchers_count': 3273, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3273, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334080, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5265', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297808601', 'updated_at': '2017-04-27T19:01:40Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5265#issuecomment-297808601', 'id': 297808601, 'created_at': '2017-04-27T19:01:40Z', 'body': "PR #5331 fixed the colors (in some way I don't fully understand), so I'm closing this PR."}}}
2017-04-27T18:55:28.176642	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5331#issuecomment-297806955', 'author': 'JosJuice', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'created', 'id': 5331, 'title': '[Android] Fix game banners', 'body': "This does fix the color issue for me, but I don't understand why. The alpha channel is always 0xFF, so why would it matter if the colors are treated as pre-multiplied or not?\r\n\r\nBut either way, I think the change that this PR makes is good regardless of whether it fixes the color issue.", 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5331.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5331.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5331', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5331'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/mahdihijazi/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/836892?v=3', 'url': 'https://api.github.com/users/mahdihijazi', 'followers_url': 'https://api.github.com/users/mahdihijazi/followers', 'gists_url': 'https://api.github.com/users/mahdihijazi/gists{/gist_id}', 'type': 'User', 'id': 836892, 'subscriptions_url': 'https://api.github.com/users/mahdihijazi/subscriptions', 'received_events_url': 'https://api.github.com/users/mahdihijazi/received_events', 'login': 'mahdihijazi', 'html_url': 'https://github.com/mahdihijazi', 'repos_url': 'https://api.github.com/users/mahdihijazi/repos', 'starred_url': 'https://api.github.com/users/mahdihijazi/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/mahdihijazi/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/mahdihijazi/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331', 'labels': [], 'number': 5331, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331/comments', 'updated_at': '2017-04-27T18:55:27Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5331', 'locked': False, 'comments': 0, 'title': '[Android] Fix game banners', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331/labels{/name}', 'created_at': '2017-04-27T18:42:38Z', 'assignee': None, 'body': 'Use Bitmap.setPixels() instead of Bitmap.copyPixelsFromBuffer() the former\r\nuse non pre-multiplied values of the colors which is what we expect to\r\ncome from the native code.', 'state': 'open', 'closed_at': None, 'id': 224876522, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3273, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T18:20:53Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T18:46:35Z', 'watchers_count': 3273, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3273, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334080, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5331', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297806955', 'updated_at': '2017-04-27T18:55:27Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5331#issuecomment-297806955', 'id': 297806955, 'created_at': '2017-04-27T18:55:27Z', 'body': "This does fix the color issue for me, but I don't understand why. The alpha channel is always 0xFF, so why would it matter if the colors are treated as pre-multiplied or not?\r\n\r\nBut either way, I think the change that this PR makes is good regardless of whether it fixes the color issue."}}}
2017-04-27T18:54:40.903391	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/3671#issuecomment-297795987', 'author': 'bb010g', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': False, 'action': 'edited', 'id': 3671, 'title': 'Add EditorConfig', 'body': "Rebased with @JosJuice's suggestion put in. I also looked through the most common source file types and tried to make it a bit more thorough. (Using `charset = utf-8` for all source files could potentially be a problem if #5330 is merged, but it looks like that's leaning towards staying UTF-8 only. I didn't find any non–UTF-8 files with an `enca -L none Source/**/*` scan.)", 'raw': {'action': 'edited', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3273, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T18:20:53Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T18:46:35Z', 'watchers_count': 3273, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3273, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334080, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297795987', 'updated_at': '2017-04-27T18:51:27Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671#issuecomment-297795987', 'id': 297795987, 'created_at': '2017-04-27T18:15:10Z', 'body': "Rebased with @JosJuice's suggestion put in. I also looked through the most common source file types and tried to make it a bit more thorough. (Using `charset = utf-8` for all source files could potentially be a problem if #5330 is merged, but it looks like that's leaning towards staying UTF-8 only. I didn't find any non–UTF-8 files with an `enca -L none Source/**/*` scan.)"}, 'changes': {'body': {'from': "Rebased with @JosJuice's suggestion put in. I also looked through the most common source file types and tried to make it a bit more thorough. (Using `charset = utf-8` for all source files could potentially be a problem if #5330 is merged, but it looks like that's leaning towards staying UTF-8 only. I didn't find any non–UTF-8 files with an `enca -L none Source/**/*` scan.)"}}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/3671.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/3671.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/3671', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671', 'labels': [{'default': False, 'id': 221809816, 'color': 'fad8c7', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels/RFC', 'name': 'RFC'}], 'number': 3671, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/comments', 'updated_at': '2017-04-27T18:51:27Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671', 'locked': False, 'comments': 12, 'title': 'Add EditorConfig', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/labels{/name}', 'created_at': '2016-02-25T03:33:26Z', 'assignee': None, 'body': 'Details at http://editorconfig.org/.\n\n<!-- Reviewable:start -->\n\n[<img src="https://reviewable.io/review_button.svg" height="40" alt="Review on Reviewable"/>](https://reviewable.io/reviews/dolphin-emu/dolphin/3671)\n\n<!-- Reviewable:end -->\n', 'state': 'open', 'closed_at': None, 'id': 136267376, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}}}
2017-04-27T18:51:28.198159	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/3671#issuecomment-297795987', 'author': 'bb010g', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': False, 'action': 'edited', 'id': 3671, 'title': 'Add EditorConfig', 'body': "Rebased with @JosJuice's suggestion put in. I also looked through the most common source file types and tried to make it a bit more thorough. (Using `charset = utf-8` for all source files could potentially be a problem if #5330 is merged, but it looks like that's leaning towards staying UTF-8 only. I didn't find any non–UTF-8 files with an `enca -L none Source/**/*` scan.)\r\n\r\n(EDIT: If you're looking at this right now, I put this up a bit early, and Git is stil pushing slowly.)", 'raw': {'action': 'edited', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3273, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T18:20:53Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T18:46:35Z', 'watchers_count': 3273, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3273, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334080, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297795987', 'updated_at': '2017-04-27T18:20:22Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671#issuecomment-297795987', 'id': 297795987, 'created_at': '2017-04-27T18:15:10Z', 'body': "Rebased with @JosJuice's suggestion put in. I also looked through the most common source file types and tried to make it a bit more thorough. (Using `charset = utf-8` for all source files could potentially be a problem if #5330 is merged, but it looks like that's leaning towards staying UTF-8 only. I didn't find any non–UTF-8 files with an `enca -L none Source/**/*` scan.)\r\n\r\n(EDIT: If you're looking at this right now, I put this up a bit early, and Git is stil pushing slowly.)"}, 'changes': {'body': {'from': "Rebased with @JosJuice's suggestion put in. I also looked through the most common source file types and tried to make it a bit more thorough. (Using `charset = utf-8` for all source files could potentially be a problem if #5330 is merged, but it looks like that's leaning towards staying UTF-8 only. I didn't find any non–UTF-8 files with an `enca -L none Source/**/*` scan.)\r\n\r\n(EDIT: If you're looking at this right now, I put this up a bit early, and Git is stil pushing slowly.)"}}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/3671.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/3671.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/3671', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671', 'labels': [{'default': False, 'id': 221809816, 'color': 'fad8c7', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels/RFC', 'name': 'RFC'}], 'number': 3671, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/comments', 'updated_at': '2017-04-27T18:46:34Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671', 'locked': False, 'comments': 12, 'title': 'Add EditorConfig', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/labels{/name}', 'created_at': '2016-02-25T03:33:26Z', 'assignee': None, 'body': 'Details at http://editorconfig.org/.\n\n<!-- Reviewable:start -->\n\n[<img src="https://reviewable.io/review_button.svg" height="40" alt="Review on Reviewable"/>](https://reviewable.io/reviews/dolphin-emu/dolphin/3671)\n\n<!-- Reviewable:end -->\n', 'state': 'open', 'closed_at': None, 'id': 136267376, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}}}
2017-04-27T18:20:22.796914	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/3671#issuecomment-297795987', 'author': 'bb010g', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': False, 'action': 'edited', 'id': 3671, 'title': 'Add EditorConfig', 'body': "Rebased with @JosJuice's suggestion put in. I also looked through the most common source file types and tried to make it a bit more thorough. (Using `charset = utf-8` for all source files could potentially be a problem if #5330 is merged, but it looks like that's leaning towards staying UTF-8 only. I didn't find any non–UTF-8 files with an `enca -L none Source/**/*` scan.)", 'raw': {'action': 'edited', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'repository': {'has_projects': False, 'open_issues': 160, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3272, 'open_issues_count': 160, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T09:22:51Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T17:30:58Z', 'watchers_count': 3272, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3272, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334080, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297795987', 'updated_at': '2017-04-27T18:15:10Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671#issuecomment-297795987', 'id': 297795987, 'created_at': '2017-04-27T18:15:10Z', 'body': "Rebased with @JosJuice's suggestion put in. I also looked through the most common source file types and tried to make it a bit more thorough. (Using `charset = utf-8` for all source files could potentially be a problem if #5330 is merged, but it looks like that's leaning towards staying UTF-8 only. I didn't find any non–UTF-8 files with an `enca -L none Source/**/*` scan.)"}, 'changes': {'body': {'from': "Rebased with @JosJuice's suggestion put in. I also looked through the most common source file types and tried to make it a bit more thorough. (Using `charset = utf-8` for all source files could potentially be a problem if #5330 is merged, but it looks like that's leaning towards staying UTF-8 only. I didn't find any non–UTF-8 files with an `enca -L none Source/**/*` scan.)"}}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/3671.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/3671.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/3671', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671', 'labels': [{'default': False, 'id': 221809816, 'color': 'fad8c7', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels/RFC', 'name': 'RFC'}], 'number': 3671, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/comments', 'updated_at': '2017-04-27T18:19:17Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671', 'locked': False, 'comments': 12, 'title': 'Add EditorConfig', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/labels{/name}', 'created_at': '2016-02-25T03:33:26Z', 'assignee': None, 'body': 'Details at http://editorconfig.org/.\n\n<!-- Reviewable:start -->\n\n[<img src="https://reviewable.io/review_button.svg" height="40" alt="Review on Reviewable"/>](https://reviewable.io/reviews/dolphin-emu/dolphin/3671)\n\n<!-- Reviewable:end -->\n', 'state': 'open', 'closed_at': None, 'id': 136267376, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}}}
2017-04-27T18:19:17.503207	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/3671#issuecomment-297797145', 'author': 'JosJuice', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'created', 'id': 3671, 'title': 'Add EditorConfig', 'body': 'The question in PR #5330 is whether we should use UTF-8 or ASCII, so either way, it will be compatible with UTF-8.', 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/3671.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/3671.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/3671', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671', 'labels': [{'default': False, 'id': 221809816, 'color': 'fad8c7', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels/RFC', 'name': 'RFC'}], 'number': 3671, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/comments', 'updated_at': '2017-04-27T18:19:16Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671', 'locked': False, 'comments': 11, 'title': 'Add EditorConfig', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/labels{/name}', 'created_at': '2016-02-25T03:33:26Z', 'assignee': None, 'body': 'Details at http://editorconfig.org/.\n\n<!-- Reviewable:start -->\n\n[<img src="https://reviewable.io/review_button.svg" height="40" alt="Review on Reviewable"/>](https://reviewable.io/reviews/dolphin-emu/dolphin/3671)\n\n<!-- Reviewable:end -->\n', 'state': 'open', 'closed_at': None, 'id': 136267376, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 160, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3272, 'open_issues_count': 160, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T09:22:51Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T17:30:58Z', 'watchers_count': 3272, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3272, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334080, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297797145', 'updated_at': '2017-04-27T18:19:16Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671#issuecomment-297797145', 'id': 297797145, 'created_at': '2017-04-27T18:19:16Z', 'body': 'The question in PR #5330 is whether we should use UTF-8 or ASCII, so either way, it will be compatible with UTF-8.'}}}
2017-04-27T18:16:24.430482	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#issuecomment-297796283', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': False, 'action': 'created', 'id': 5323, 'title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name", 'body': 'Ah, what about this +  CHECK_SETTING("Video_Settings", "CustomTextures", bCustomTextures);', 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/ZexaronS/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/20824154?v=3', 'url': 'https://api.github.com/users/ZexaronS', 'followers_url': 'https://api.github.com/users/ZexaronS/followers', 'gists_url': 'https://api.github.com/users/ZexaronS/gists{/gist_id}', 'type': 'User', 'id': 20824154, 'subscriptions_url': 'https://api.github.com/users/ZexaronS/subscriptions', 'received_events_url': 'https://api.github.com/users/ZexaronS/received_events', 'login': 'ZexaronS', 'html_url': 'https://github.com/ZexaronS', 'repos_url': 'https://api.github.com/users/ZexaronS/repos', 'starred_url': 'https://api.github.com/users/ZexaronS/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/ZexaronS/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/ZexaronS/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5323.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5323.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/ZexaronS/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/20824154?v=3', 'url': 'https://api.github.com/users/ZexaronS', 'followers_url': 'https://api.github.com/users/ZexaronS/followers', 'gists_url': 'https://api.github.com/users/ZexaronS/gists{/gist_id}', 'type': 'User', 'id': 20824154, 'subscriptions_url': 'https://api.github.com/users/ZexaronS/subscriptions', 'received_events_url': 'https://api.github.com/users/ZexaronS/received_events', 'login': 'ZexaronS', 'html_url': 'https://github.com/ZexaronS', 'repos_url': 'https://api.github.com/users/ZexaronS/repos', 'starred_url': 'https://api.github.com/users/ZexaronS/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/ZexaronS/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/ZexaronS/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5323', 'labels': [], 'number': 5323, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5323/comments', 'updated_at': '2017-04-27T18:16:23Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323', 'locked': False, 'comments': 9, 'title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name", 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5323/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5323/labels{/name}', 'created_at': '2017-04-26T10:14:35Z', 'assignee': None, 'body': "Hello\r\n\r\nMy first learning-curve PR. Maybe in future I can do more.\r\n\r\nI then noticed that the commit message gets transferred to github, oops, I simply didn't had patience with git but eventually I'll get used to it.\r\n\r\nEDIT: I should add that I'm totally new to git/github and the whole opensource thing, I've only done C# GUI apps in the past, so thanks for putting up with me. But I'm a PC geek (SW and HW) so I tend to have a very familiar with these things and I should learn fast.", 'state': 'open', 'closed_at': None, 'id': 224415750, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 160, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3272, 'open_issues_count': 160, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T09:22:51Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T17:30:58Z', 'watchers_count': 3272, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3272, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334080, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5323', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/ZexaronS/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/20824154?v=3', 'url': 'https://api.github.com/users/ZexaronS', 'followers_url': 'https://api.github.com/users/ZexaronS/followers', 'gists_url': 'https://api.github.com/users/ZexaronS/gists{/gist_id}', 'type': 'User', 'id': 20824154, 'subscriptions_url': 'https://api.github.com/users/ZexaronS/subscriptions', 'received_events_url': 'https://api.github.com/users/ZexaronS/received_events', 'login': 'ZexaronS', 'html_url': 'https://github.com/ZexaronS', 'repos_url': 'https://api.github.com/users/ZexaronS/repos', 'starred_url': 'https://api.github.com/users/ZexaronS/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/ZexaronS/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/ZexaronS/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297796283', 'updated_at': '2017-04-27T18:16:23Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#issuecomment-297796283', 'id': 297796283, 'created_at': '2017-04-27T18:16:23Z', 'body': 'Ah, what about this +  CHECK_SETTING("Video_Settings", "CustomTextures", bCustomTextures);'}}}
2017-04-27T18:15:11.411693	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/3671#issuecomment-297795987', 'author': 'bb010g', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': False, 'action': 'created', 'id': 3671, 'title': 'Add EditorConfig', 'body': "Rebased with @JosJuice's suggestion put in. I also looked through the most common source file types and tried to make it a bit more thorough. (Using `charset = utf-8` for all source files could potentially be a problem if #5330 is merged, but it looks like that's leaning towards staying UTF-8 only. I didn't find any non–UTF-8 files with an `enca -L none Source/**/*` scan.)", 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/3671.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/3671.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/3671', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671', 'labels': [{'default': False, 'id': 221809816, 'color': 'fad8c7', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels/RFC', 'name': 'RFC'}], 'number': 3671, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/comments', 'updated_at': '2017-04-27T18:15:10Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671', 'locked': False, 'comments': 10, 'title': 'Add EditorConfig', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671/labels{/name}', 'created_at': '2016-02-25T03:33:26Z', 'assignee': None, 'body': 'Details at http://editorconfig.org/.\n\n<!-- Reviewable:start -->\n\n[<img src="https://reviewable.io/review_button.svg" height="40" alt="Review on Reviewable"/>](https://reviewable.io/reviews/dolphin-emu/dolphin/3671)\n\n<!-- Reviewable:end -->\n', 'state': 'open', 'closed_at': None, 'id': 136267376, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 160, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3272, 'open_issues_count': 160, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T09:22:51Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T17:30:58Z', 'watchers_count': 3272, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3272, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334080, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/3671', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297795987', 'updated_at': '2017-04-27T18:15:10Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/3671#issuecomment-297795987', 'id': 297795987, 'created_at': '2017-04-27T18:15:10Z', 'body': "Rebased with @JosJuice's suggestion put in. I also looked through the most common source file types and tried to make it a bit more thorough. (Using `charset = utf-8` for all source files could potentially be a problem if #5330 is merged, but it looks like that's leaning towards staying UTF-8 only. I didn't find any non–UTF-8 files with an `enca -L none Source/**/*` scan.)"}}}
2017-04-27T17:17:25.336674	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5187#issuecomment-297780963', 'author': 'bb010g', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': False, 'action': 'created', 'id': 5187, 'title': 'Fix OpenAL backend on macOS', 'body': 'Needs a rebase.', 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5187.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5187.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5187', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5187'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/ligfx/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/594093?v=3', 'url': 'https://api.github.com/users/ligfx', 'followers_url': 'https://api.github.com/users/ligfx/followers', 'gists_url': 'https://api.github.com/users/ligfx/gists{/gist_id}', 'type': 'User', 'id': 594093, 'subscriptions_url': 'https://api.github.com/users/ligfx/subscriptions', 'received_events_url': 'https://api.github.com/users/ligfx/received_events', 'login': 'ligfx', 'html_url': 'https://github.com/ligfx', 'repos_url': 'https://api.github.com/users/ligfx/repos', 'starred_url': 'https://api.github.com/users/ligfx/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/ligfx/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/ligfx/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5187', 'labels': [], 'number': 5187, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5187/comments', 'updated_at': '2017-04-27T17:17:24Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5187', 'locked': False, 'comments': 2, 'title': 'Fix OpenAL backend on macOS', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5187/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5187/labels{/name}', 'created_at': '2017-03-30T20:59:15Z', 'assignee': None, 'body': "OpenALStream was querying the backend for AL_EXT_float32 support (which\r\nsuceeds), but AL_FORMAT_STEREO_FLOAT32 was defined incorrectly.\r\n\r\nAlso changes OpenALStream to query for AL_EXT_MCFORMATS (multi-channel\r\nsupport) rather than hard-coding that it doesn't work on macOS.", 'state': 'open', 'closed_at': None, 'id': 218326238, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 160, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3272, 'open_issues_count': 160, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T09:22:51Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T16:12:34Z', 'watchers_count': 3272, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3272, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334080, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5187', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/bb010g/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/340132?v=3', 'url': 'https://api.github.com/users/bb010g', 'followers_url': 'https://api.github.com/users/bb010g/followers', 'gists_url': 'https://api.github.com/users/bb010g/gists{/gist_id}', 'type': 'User', 'id': 340132, 'subscriptions_url': 'https://api.github.com/users/bb010g/subscriptions', 'received_events_url': 'https://api.github.com/users/bb010g/received_events', 'login': 'bb010g', 'html_url': 'https://github.com/bb010g', 'repos_url': 'https://api.github.com/users/bb010g/repos', 'starred_url': 'https://api.github.com/users/bb010g/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/bb010g/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/bb010g/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297780963', 'updated_at': '2017-04-27T17:17:24Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5187#issuecomment-297780963', 'id': 297780963, 'created_at': '2017-04-27T17:17:24Z', 'body': 'Needs a rebase.'}}}
2017-04-27T16:13:23.127135	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5330#issuecomment-297763737', 'author': 'BhaaLseN', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'created', 'id': 5330, 'title': 'Unicode correctness', 'body': 'I know, and thats what we use (plus, IMO should keep); I just wanted to make my point about UTF-16 encoded files.', 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/BhaaLseN/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/826052?v=3', 'url': 'https://api.github.com/users/BhaaLseN', 'followers_url': 'https://api.github.com/users/BhaaLseN/followers', 'gists_url': 'https://api.github.com/users/BhaaLseN/gists{/gist_id}', 'type': 'User', 'id': 826052, 'subscriptions_url': 'https://api.github.com/users/BhaaLseN/subscriptions', 'received_events_url': 'https://api.github.com/users/BhaaLseN/received_events', 'login': 'BhaaLseN', 'html_url': 'https://github.com/BhaaLseN', 'repos_url': 'https://api.github.com/users/BhaaLseN/repos', 'starred_url': 'https://api.github.com/users/BhaaLseN/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/BhaaLseN/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/BhaaLseN/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5330.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5330.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5330', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Armada651/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/2028870?v=3', 'url': 'https://api.github.com/users/Armada651', 'followers_url': 'https://api.github.com/users/Armada651/followers', 'gists_url': 'https://api.github.com/users/Armada651/gists{/gist_id}', 'type': 'User', 'id': 2028870, 'subscriptions_url': 'https://api.github.com/users/Armada651/subscriptions', 'received_events_url': 'https://api.github.com/users/Armada651/received_events', 'login': 'Armada651', 'html_url': 'https://github.com/Armada651', 'repos_url': 'https://api.github.com/users/Armada651/repos', 'starred_url': 'https://api.github.com/users/Armada651/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Armada651/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Armada651/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330', 'labels': [], 'number': 5330, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/comments', 'updated_at': '2017-04-27T16:13:22Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330', 'locked': False, 'comments': 7, 'title': 'Unicode correctness', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/labels{/name}', 'created_at': '2017-04-27T12:44:56Z', 'assignee': None, 'body': "This PR address some unicode issues when building or running Dolphin on systems with non-Latin codepages.\r\n\r\n1. All source files containing unicode characters have to be encoded using UTF-8 BOM [when compiling with MSVC](https://msdn.microsoft.com/en-us/library/xwy0e8f2.aspx).\r\n2. Some unicode characters can  only be represented in UTF-16 on some code pages.\r\n\r\nUnfortunately I couldn't switch to UTF-16 for the copyright sign in the About Dialog from DolphinQt because there is no UTF-16 version of `tr()`. So instead I just replaced everything in the string with non-unicode characters.", 'state': 'open', 'closed_at': None, 'id': 224771505, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 160, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3272, 'open_issues_count': 160, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T09:22:51Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T16:12:34Z', 'watchers_count': 3272, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3272, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334075, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/BhaaLseN/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/826052?v=3', 'url': 'https://api.github.com/users/BhaaLseN', 'followers_url': 'https://api.github.com/users/BhaaLseN/followers', 'gists_url': 'https://api.github.com/users/BhaaLseN/gists{/gist_id}', 'type': 'User', 'id': 826052, 'subscriptions_url': 'https://api.github.com/users/BhaaLseN/subscriptions', 'received_events_url': 'https://api.github.com/users/BhaaLseN/received_events', 'login': 'BhaaLseN', 'html_url': 'https://github.com/BhaaLseN', 'repos_url': 'https://api.github.com/users/BhaaLseN/repos', 'starred_url': 'https://api.github.com/users/BhaaLseN/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/BhaaLseN/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/BhaaLseN/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297763737', 'updated_at': '2017-04-27T16:13:22Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330#issuecomment-297763737', 'id': 297763737, 'created_at': '2017-04-27T16:13:22Z', 'body': 'I know, and thats what we use (plus, IMO should keep); I just wanted to make my point about UTF-16 encoded files.'}}}
2017-04-27T16:12:45.160478	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5330#issuecomment-297763549', 'author': 'Orphis', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'created', 'id': 5330, 'title': 'Unicode correctness', 'body': 'Just removing the UTF-8 characters should be enough for our code.\r\nI don\'t like adding compiler flags when there is another solution.\r\n\r\nExternals are fine to compile with that flag (ex libusb), ffmpeg header\'s should be fixed as it is propagating the UTF-8 requirement to all sources including it (and I\'m sure 99% of users are unaware). It seems that it\'s only a unicode "Q" in that file actually.', 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Orphis/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/300430?v=3', 'url': 'https://api.github.com/users/Orphis', 'followers_url': 'https://api.github.com/users/Orphis/followers', 'gists_url': 'https://api.github.com/users/Orphis/gists{/gist_id}', 'type': 'User', 'id': 300430, 'subscriptions_url': 'https://api.github.com/users/Orphis/subscriptions', 'received_events_url': 'https://api.github.com/users/Orphis/received_events', 'login': 'Orphis', 'html_url': 'https://github.com/Orphis', 'repos_url': 'https://api.github.com/users/Orphis/repos', 'starred_url': 'https://api.github.com/users/Orphis/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Orphis/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Orphis/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5330.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5330.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5330', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Armada651/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/2028870?v=3', 'url': 'https://api.github.com/users/Armada651', 'followers_url': 'https://api.github.com/users/Armada651/followers', 'gists_url': 'https://api.github.com/users/Armada651/gists{/gist_id}', 'type': 'User', 'id': 2028870, 'subscriptions_url': 'https://api.github.com/users/Armada651/subscriptions', 'received_events_url': 'https://api.github.com/users/Armada651/received_events', 'login': 'Armada651', 'html_url': 'https://github.com/Armada651', 'repos_url': 'https://api.github.com/users/Armada651/repos', 'starred_url': 'https://api.github.com/users/Armada651/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Armada651/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Armada651/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330', 'labels': [], 'number': 5330, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/comments', 'updated_at': '2017-04-27T16:12:44Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330', 'locked': False, 'comments': 6, 'title': 'Unicode correctness', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/labels{/name}', 'created_at': '2017-04-27T12:44:56Z', 'assignee': None, 'body': "This PR address some unicode issues when building or running Dolphin on systems with non-Latin codepages.\r\n\r\n1. All source files containing unicode characters have to be encoded using UTF-8 BOM [when compiling with MSVC](https://msdn.microsoft.com/en-us/library/xwy0e8f2.aspx).\r\n2. Some unicode characters can  only be represented in UTF-16 on some code pages.\r\n\r\nUnfortunately I couldn't switch to UTF-16 for the copyright sign in the About Dialog from DolphinQt because there is no UTF-16 version of `tr()`. So instead I just replaced everything in the string with non-unicode characters.", 'state': 'open', 'closed_at': None, 'id': 224771505, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 160, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3272, 'open_issues_count': 160, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T09:22:51Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T16:12:34Z', 'watchers_count': 3272, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3272, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334075, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Orphis/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/300430?v=3', 'url': 'https://api.github.com/users/Orphis', 'followers_url': 'https://api.github.com/users/Orphis/followers', 'gists_url': 'https://api.github.com/users/Orphis/gists{/gist_id}', 'type': 'User', 'id': 300430, 'subscriptions_url': 'https://api.github.com/users/Orphis/subscriptions', 'received_events_url': 'https://api.github.com/users/Orphis/received_events', 'login': 'Orphis', 'html_url': 'https://github.com/Orphis', 'repos_url': 'https://api.github.com/users/Orphis/repos', 'starred_url': 'https://api.github.com/users/Orphis/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Orphis/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Orphis/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297763549', 'updated_at': '2017-04-27T16:12:44Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330#issuecomment-297763549', 'id': 297763549, 'created_at': '2017-04-27T16:12:44Z', 'body': 'Just removing the UTF-8 characters should be enough for our code.\r\nI don\'t like adding compiler flags when there is another solution.\r\n\r\nExternals are fine to compile with that flag (ex libusb), ffmpeg header\'s should be fixed as it is propagating the UTF-8 requirement to all sources including it (and I\'m sure 99% of users are unaware). It seems that it\'s only a unicode "Q" in that file actually.'}}}
2017-04-27T16:11:55.521930	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5330#issuecomment-297763317', 'author': 'Armada651', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'created', 'id': 5330, 'title': 'Unicode correctness', 'body': "@BhaaLseN There's an encoding of UTF-8 with BOM, so that doesn't imply UTF-16.", 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Armada651/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/2028870?v=3', 'url': 'https://api.github.com/users/Armada651', 'followers_url': 'https://api.github.com/users/Armada651/followers', 'gists_url': 'https://api.github.com/users/Armada651/gists{/gist_id}', 'type': 'User', 'id': 2028870, 'subscriptions_url': 'https://api.github.com/users/Armada651/subscriptions', 'received_events_url': 'https://api.github.com/users/Armada651/received_events', 'login': 'Armada651', 'html_url': 'https://github.com/Armada651', 'repos_url': 'https://api.github.com/users/Armada651/repos', 'starred_url': 'https://api.github.com/users/Armada651/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Armada651/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Armada651/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5330.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5330.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5330', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Armada651/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/2028870?v=3', 'url': 'https://api.github.com/users/Armada651', 'followers_url': 'https://api.github.com/users/Armada651/followers', 'gists_url': 'https://api.github.com/users/Armada651/gists{/gist_id}', 'type': 'User', 'id': 2028870, 'subscriptions_url': 'https://api.github.com/users/Armada651/subscriptions', 'received_events_url': 'https://api.github.com/users/Armada651/received_events', 'login': 'Armada651', 'html_url': 'https://github.com/Armada651', 'repos_url': 'https://api.github.com/users/Armada651/repos', 'starred_url': 'https://api.github.com/users/Armada651/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Armada651/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Armada651/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330', 'labels': [], 'number': 5330, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/comments', 'updated_at': '2017-04-27T16:11:54Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330', 'locked': False, 'comments': 5, 'title': 'Unicode correctness', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/labels{/name}', 'created_at': '2017-04-27T12:44:56Z', 'assignee': None, 'body': "This PR address some unicode issues when building or running Dolphin on systems with non-Latin codepages.\r\n\r\n1. All source files containing unicode characters have to be encoded using UTF-8 BOM [when compiling with MSVC](https://msdn.microsoft.com/en-us/library/xwy0e8f2.aspx).\r\n2. Some unicode characters can  only be represented in UTF-16 on some code pages.\r\n\r\nUnfortunately I couldn't switch to UTF-16 for the copyright sign in the About Dialog from DolphinQt because there is no UTF-16 version of `tr()`. So instead I just replaced everything in the string with non-unicode characters.", 'state': 'open', 'closed_at': None, 'id': 224771505, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3272, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T09:22:51Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T14:25:05Z', 'watchers_count': 3272, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3272, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334075, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Armada651/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/2028870?v=3', 'url': 'https://api.github.com/users/Armada651', 'followers_url': 'https://api.github.com/users/Armada651/followers', 'gists_url': 'https://api.github.com/users/Armada651/gists{/gist_id}', 'type': 'User', 'id': 2028870, 'subscriptions_url': 'https://api.github.com/users/Armada651/subscriptions', 'received_events_url': 'https://api.github.com/users/Armada651/received_events', 'login': 'Armada651', 'html_url': 'https://github.com/Armada651', 'repos_url': 'https://api.github.com/users/Armada651/repos', 'starred_url': 'https://api.github.com/users/Armada651/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Armada651/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Armada651/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297763317', 'updated_at': '2017-04-27T16:11:54Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330#issuecomment-297763317', 'id': 297763317, 'created_at': '2017-04-27T16:11:54Z', 'body': "@BhaaLseN There's an encoding of UTF-8 with BOM, so that doesn't imply UTF-16."}}}
2017-04-27T16:03:09.947419	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5330#issuecomment-297759444', 'author': 'BhaaLseN', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'edited', 'id': 5330, 'title': 'Unicode correctness', 'body': "I wouldn't want UTF-16 source files; they don't seem to play well with most Diff tools. YMMV, but at least one of the SQL Scripts we got under version control at work (which, when directly exported from the SQL tool that dev uses, defaults to UTF-16) is treated like a binary and fails pretty much on every minor concurrent change.\r\n\r\nIMO we should just slap on that compiler switch for MSVC.", 'raw': {'action': 'edited', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/BhaaLseN/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/826052?v=3', 'url': 'https://api.github.com/users/BhaaLseN', 'followers_url': 'https://api.github.com/users/BhaaLseN/followers', 'gists_url': 'https://api.github.com/users/BhaaLseN/gists{/gist_id}', 'type': 'User', 'id': 826052, 'subscriptions_url': 'https://api.github.com/users/BhaaLseN/subscriptions', 'received_events_url': 'https://api.github.com/users/BhaaLseN/received_events', 'login': 'BhaaLseN', 'html_url': 'https://github.com/BhaaLseN', 'repos_url': 'https://api.github.com/users/BhaaLseN/repos', 'starred_url': 'https://api.github.com/users/BhaaLseN/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/BhaaLseN/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/BhaaLseN/events{/privacy}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3272, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T09:22:51Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T14:25:05Z', 'watchers_count': 3272, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3272, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334075, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/BhaaLseN/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/826052?v=3', 'url': 'https://api.github.com/users/BhaaLseN', 'followers_url': 'https://api.github.com/users/BhaaLseN/followers', 'gists_url': 'https://api.github.com/users/BhaaLseN/gists{/gist_id}', 'type': 'User', 'id': 826052, 'subscriptions_url': 'https://api.github.com/users/BhaaLseN/subscriptions', 'received_events_url': 'https://api.github.com/users/BhaaLseN/received_events', 'login': 'BhaaLseN', 'html_url': 'https://github.com/BhaaLseN', 'repos_url': 'https://api.github.com/users/BhaaLseN/repos', 'starred_url': 'https://api.github.com/users/BhaaLseN/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/BhaaLseN/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/BhaaLseN/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297759444', 'updated_at': '2017-04-27T16:02:55Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330#issuecomment-297759444', 'id': 297759444, 'created_at': '2017-04-27T16:02:55Z', 'body': "I wouldn't want UTF-16 source files; they don't seem to play well with most Diff tools. YMMV, but at least one of the SQL Scripts we got under version control at work (which, when directly exported from the SQL tool that dev uses, defaults to UTF-16) is treated like a binary and fails pretty much on every minor concurrent change.\r\n\r\nIMO we should just slap on that compiler switch for MSVC."}, 'changes': {'body': {'from': "I wouldn't want UTF-16 source files; they don't seem to play well with most Diff tools. YMMV, but at least one of the SQL Scripts we got under version control at work (which, when directly exported from the SQL tool that dev uses, defaults to UTF-16) is treated like a binary and fails pretty much on every minor concurrent change.\r\n\r\nIMO we should just slap on that compiler switch for MSVC."}}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5330.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5330.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5330', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Armada651/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/2028870?v=3', 'url': 'https://api.github.com/users/Armada651', 'followers_url': 'https://api.github.com/users/Armada651/followers', 'gists_url': 'https://api.github.com/users/Armada651/gists{/gist_id}', 'type': 'User', 'id': 2028870, 'subscriptions_url': 'https://api.github.com/users/Armada651/subscriptions', 'received_events_url': 'https://api.github.com/users/Armada651/received_events', 'login': 'Armada651', 'html_url': 'https://github.com/Armada651', 'repos_url': 'https://api.github.com/users/Armada651/repos', 'starred_url': 'https://api.github.com/users/Armada651/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Armada651/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Armada651/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330', 'labels': [], 'number': 5330, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/comments', 'updated_at': '2017-04-27T16:02:55Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330', 'locked': False, 'comments': 5, 'title': 'Unicode correctness', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/labels{/name}', 'created_at': '2017-04-27T12:44:56Z', 'assignee': None, 'body': "This PR address some unicode issues when building or running Dolphin on systems with non-Latin codepages.\r\n\r\n1. All source files containing unicode characters have to be encoded using UTF-8 BOM [when compiling with MSVC](https://msdn.microsoft.com/en-us/library/xwy0e8f2.aspx).\r\n2. Some unicode characters can  only be represented in UTF-16 on some code pages.\r\n\r\nUnfortunately I couldn't switch to UTF-16 for the copyright sign in the About Dialog from DolphinQt because there is no UTF-16 version of `tr()`. So instead I just replaced everything in the string with non-unicode characters.", 'state': 'open', 'closed_at': None, 'id': 224771505, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}}}
2017-04-27T16:02:56.077975	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5330#issuecomment-297759444', 'author': 'BhaaLseN', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'created', 'id': 5330, 'title': 'Unicode correctness', 'body': "I wouldn't want UTF-16 source files; they don't seem to play well with most Diff tools. YMMV, but at least one of the SQL Scripts we got under version control at work (which, when directly exported from the SQL tool that dev uses, defaults to UTF-16) is treated like a binary and fails pretty much on every minor concurrent change.\r\n\r\nIMO we should just slap on that compiler switch for MSVC.", 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/BhaaLseN/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/826052?v=3', 'url': 'https://api.github.com/users/BhaaLseN', 'followers_url': 'https://api.github.com/users/BhaaLseN/followers', 'gists_url': 'https://api.github.com/users/BhaaLseN/gists{/gist_id}', 'type': 'User', 'id': 826052, 'subscriptions_url': 'https://api.github.com/users/BhaaLseN/subscriptions', 'received_events_url': 'https://api.github.com/users/BhaaLseN/received_events', 'login': 'BhaaLseN', 'html_url': 'https://github.com/BhaaLseN', 'repos_url': 'https://api.github.com/users/BhaaLseN/repos', 'starred_url': 'https://api.github.com/users/BhaaLseN/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/BhaaLseN/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/BhaaLseN/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5330.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5330.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5330', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Armada651/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/2028870?v=3', 'url': 'https://api.github.com/users/Armada651', 'followers_url': 'https://api.github.com/users/Armada651/followers', 'gists_url': 'https://api.github.com/users/Armada651/gists{/gist_id}', 'type': 'User', 'id': 2028870, 'subscriptions_url': 'https://api.github.com/users/Armada651/subscriptions', 'received_events_url': 'https://api.github.com/users/Armada651/received_events', 'login': 'Armada651', 'html_url': 'https://github.com/Armada651', 'repos_url': 'https://api.github.com/users/Armada651/repos', 'starred_url': 'https://api.github.com/users/Armada651/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Armada651/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Armada651/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330', 'labels': [], 'number': 5330, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/comments', 'updated_at': '2017-04-27T16:02:55Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330', 'locked': False, 'comments': 4, 'title': 'Unicode correctness', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/labels{/name}', 'created_at': '2017-04-27T12:44:56Z', 'assignee': None, 'body': "This PR address some unicode issues when building or running Dolphin on systems with non-Latin codepages.\r\n\r\n1. All source files containing unicode characters have to be encoded using UTF-8 BOM [when compiling with MSVC](https://msdn.microsoft.com/en-us/library/xwy0e8f2.aspx).\r\n2. Some unicode characters can  only be represented in UTF-16 on some code pages.\r\n\r\nUnfortunately I couldn't switch to UTF-16 for the copyright sign in the About Dialog from DolphinQt because there is no UTF-16 version of `tr()`. So instead I just replaced everything in the string with non-unicode characters.", 'state': 'open', 'closed_at': None, 'id': 224771505, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3272, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T09:22:51Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T14:25:05Z', 'watchers_count': 3272, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3272, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334075, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/BhaaLseN/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/826052?v=3', 'url': 'https://api.github.com/users/BhaaLseN', 'followers_url': 'https://api.github.com/users/BhaaLseN/followers', 'gists_url': 'https://api.github.com/users/BhaaLseN/gists{/gist_id}', 'type': 'User', 'id': 826052, 'subscriptions_url': 'https://api.github.com/users/BhaaLseN/subscriptions', 'received_events_url': 'https://api.github.com/users/BhaaLseN/received_events', 'login': 'BhaaLseN', 'html_url': 'https://github.com/BhaaLseN', 'repos_url': 'https://api.github.com/users/BhaaLseN/repos', 'starred_url': 'https://api.github.com/users/BhaaLseN/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/BhaaLseN/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/BhaaLseN/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297759444', 'updated_at': '2017-04-27T16:02:55Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330#issuecomment-297759444', 'id': 297759444, 'created_at': '2017-04-27T16:02:55Z', 'body': "I wouldn't want UTF-16 source files; they don't seem to play well with most Diff tools. YMMV, but at least one of the SQL Scripts we got under version control at work (which, when directly exported from the SQL tool that dev uses, defaults to UTF-16) is treated like a binary and fails pretty much on every minor concurrent change.\r\n\r\nIMO we should just slap on that compiler switch for MSVC."}}}
2017-04-27T15:56:06.545670	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5329#issuecomment-297757293', 'author': 'BhaaLseN', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'created', 'id': 5329, 'title': 'IOS/ES: Drop unnecessary memset for vectors', 'body': "Trivial change, but I'd like to see if anything abuses that anywhere. Then again, that would probably fail on either Dolphin or real hardware, so it probably doesn't really matter. LGTM.", 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/BhaaLseN/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/826052?v=3', 'url': 'https://api.github.com/users/BhaaLseN', 'followers_url': 'https://api.github.com/users/BhaaLseN/followers', 'gists_url': 'https://api.github.com/users/BhaaLseN/gists{/gist_id}', 'type': 'User', 'id': 826052, 'subscriptions_url': 'https://api.github.com/users/BhaaLseN/subscriptions', 'received_events_url': 'https://api.github.com/users/BhaaLseN/received_events', 'login': 'BhaaLseN', 'html_url': 'https://github.com/BhaaLseN', 'repos_url': 'https://api.github.com/users/BhaaLseN/repos', 'starred_url': 'https://api.github.com/users/BhaaLseN/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/BhaaLseN/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/BhaaLseN/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5329.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5329.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5329', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5329'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/leoetlino/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/4209061?v=3', 'url': 'https://api.github.com/users/leoetlino', 'followers_url': 'https://api.github.com/users/leoetlino/followers', 'gists_url': 'https://api.github.com/users/leoetlino/gists{/gist_id}', 'type': 'User', 'id': 4209061, 'subscriptions_url': 'https://api.github.com/users/leoetlino/subscriptions', 'received_events_url': 'https://api.github.com/users/leoetlino/received_events', 'login': 'leoetlino', 'html_url': 'https://github.com/leoetlino', 'repos_url': 'https://api.github.com/users/leoetlino/repos', 'starred_url': 'https://api.github.com/users/leoetlino/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/leoetlino/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/leoetlino/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5329', 'labels': [], 'number': 5329, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5329/comments', 'updated_at': '2017-04-27T15:56:05Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5329', 'locked': False, 'comments': 1, 'title': 'IOS/ES: Drop unnecessary memset for vectors', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5329/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5329/labels{/name}', 'created_at': '2017-04-26T22:08:20Z', 'assignee': None, 'body': "IOS doesn't do it, and we don't need it anyway, so let's not do it.", 'state': 'open', 'closed_at': None, 'id': 224613938, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3272, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T09:22:51Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T14:25:05Z', 'watchers_count': 3272, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3272, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334075, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5329', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/BhaaLseN/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/826052?v=3', 'url': 'https://api.github.com/users/BhaaLseN', 'followers_url': 'https://api.github.com/users/BhaaLseN/followers', 'gists_url': 'https://api.github.com/users/BhaaLseN/gists{/gist_id}', 'type': 'User', 'id': 826052, 'subscriptions_url': 'https://api.github.com/users/BhaaLseN/subscriptions', 'received_events_url': 'https://api.github.com/users/BhaaLseN/received_events', 'login': 'BhaaLseN', 'html_url': 'https://github.com/BhaaLseN', 'repos_url': 'https://api.github.com/users/BhaaLseN/repos', 'starred_url': 'https://api.github.com/users/BhaaLseN/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/BhaaLseN/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/BhaaLseN/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297757293', 'updated_at': '2017-04-27T15:56:05Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5329#issuecomment-297757293', 'id': 297757293, 'created_at': '2017-04-27T15:56:05Z', 'body': "Trivial change, but I'd like to see if anything abuses that anywhere. Then again, that would probably fail on either Dolphin or real hardware, so it probably doesn't really matter. LGTM."}}}
2017-04-27T15:45:06.342137	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5330#issuecomment-297754052', 'author': 'Armada651', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_issue_comment', 'safe_author': True, 'action': 'created', 'id': 5330, 'title': 'Unicode correctness', 'body': "@lioncash It could potentially also affect GCC, according to the documentation it could also be affected by the system code page. So @Orphis suggested that the most reliable fix would be to just fix the source code.\r\n\r\nBut no one likes BOMs, so fixing the source code would imply adding a bunch of `\\u` and `u8` where necessary.\r\n\r\nI'm fine with either solution, though I prefer the compiler flag option.", 'raw': {'action': 'created', 'sender': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Armada651/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/2028870?v=3', 'url': 'https://api.github.com/users/Armada651', 'followers_url': 'https://api.github.com/users/Armada651/followers', 'gists_url': 'https://api.github.com/users/Armada651/gists{/gist_id}', 'type': 'User', 'id': 2028870, 'subscriptions_url': 'https://api.github.com/users/Armada651/subscriptions', 'received_events_url': 'https://api.github.com/users/Armada651/received_events', 'login': 'Armada651', 'html_url': 'https://github.com/Armada651', 'repos_url': 'https://api.github.com/users/Armada651/repos', 'starred_url': 'https://api.github.com/users/Armada651/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Armada651/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Armada651/events{/privacy}'}, 'issue': {'pull_request': {'patch_url': 'https://github.com/dolphin-emu/dolphin/pull/5330.patch', 'diff_url': 'https://github.com/dolphin-emu/dolphin/pull/5330.diff', 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5330', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330'}, 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Armada651/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/2028870?v=3', 'url': 'https://api.github.com/users/Armada651', 'followers_url': 'https://api.github.com/users/Armada651/followers', 'gists_url': 'https://api.github.com/users/Armada651/gists{/gist_id}', 'type': 'User', 'id': 2028870, 'subscriptions_url': 'https://api.github.com/users/Armada651/subscriptions', 'received_events_url': 'https://api.github.com/users/Armada651/received_events', 'login': 'Armada651', 'html_url': 'https://github.com/Armada651', 'repos_url': 'https://api.github.com/users/Armada651/repos', 'starred_url': 'https://api.github.com/users/Armada651/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Armada651/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Armada651/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330', 'labels': [], 'number': 5330, 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/comments', 'updated_at': '2017-04-27T15:45:02Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330', 'locked': False, 'comments': 4, 'title': 'Unicode correctness', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/events', 'assignees': [], 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330/labels{/name}', 'created_at': '2017-04-27T12:44:56Z', 'assignee': None, 'body': "This PR address some unicode issues when building or running Dolphin on systems with non-Latin codepages.\r\n\r\n1. All source files containing unicode characters have to be encoded using UTF-8 BOM [when compiling with MSVC](https://msdn.microsoft.com/en-us/library/xwy0e8f2.aspx).\r\n2. Some unicode characters can  only be represented in UTF-16 on some code pages.\r\n\r\nUnfortunately I couldn't switch to UTF-16 for the copyright sign in the About Dialog from DolphinQt because there is no UTF-16 version of `tr()`. So instead I just replaced everything in the string with non-unicode characters.", 'state': 'open', 'closed_at': None, 'id': 224771505, 'milestone': None, 'repository_url': 'https://api.github.com/repos/dolphin-emu/dolphin'}, 'repository': {'has_projects': False, 'open_issues': 161, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin', 'has_wiki': True, 'ssh_url': 'git@github.com:dolphin-emu/dolphin.git', 'fork': False, 'downloads_url': 'https://api.github.com/repos/dolphin-emu/dolphin/downloads', 'tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/tags', 'watchers': 3272, 'open_issues_count': 161, 'id': 11577304, 'contents_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}', 'issue_comment_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}', 'updated_at': '2017-04-27T09:22:51Z', 'git_url': 'git://github.com/dolphin-emu/dolphin.git', 'description': 'Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.', 'forks_count': 849, 'homepage': 'https://dolphin-emu.org/', 'assignees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}', 'events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/events', 'pushed_at': '2017-04-27T14:25:05Z', 'watchers_count': 3272, 'compare_url': 'https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}', 'svn_url': 'https://github.com/dolphin-emu/dolphin', 'has_issues': False, 'issues_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}', 'subscription_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscription', 'stargazers_count': 3272, 'pulls_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}', 'statuses_url': 'https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}', 'default_branch': 'master', 'name': 'dolphin', 'merges_url': 'https://api.github.com/repos/dolphin-emu/dolphin/merges', 'deployments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/deployments', 'blobs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}', 'comments_url': 'https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}', 'keys_url': 'https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}', 'collaborators_url': 'https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}', 'git_refs_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}', 'milestones_url': 'https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}', 'owner': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/dolphin-emu/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/users/dolphin-emu', 'followers_url': 'https://api.github.com/users/dolphin-emu/followers', 'gists_url': 'https://api.github.com/users/dolphin-emu/gists{/gist_id}', 'type': 'Organization', 'id': 5050316, 'subscriptions_url': 'https://api.github.com/users/dolphin-emu/subscriptions', 'received_events_url': 'https://api.github.com/users/dolphin-emu/received_events', 'login': 'dolphin-emu', 'html_url': 'https://github.com/dolphin-emu', 'repos_url': 'https://api.github.com/users/dolphin-emu/repos', 'starred_url': 'https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/dolphin-emu/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/dolphin-emu/events{/privacy}'}, 'archive_url': 'https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}', 'commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}', 'has_downloads': True, 'issue_events_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}', 'teams_url': 'https://api.github.com/repos/dolphin-emu/dolphin/teams', 'forks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/forks', 'language': 'C++', 'has_pages': False, 'branches_url': 'https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}', 'html_url': 'https://github.com/dolphin-emu/dolphin', 'forks': 849, 'size': 334075, 'created_at': '2013-07-22T09:07:57Z', 'mirror_url': None, 'git_tags_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}', 'full_name': 'dolphin-emu/dolphin', 'subscribers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/subscribers', 'labels_url': 'https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}', 'private': False, 'git_commits_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}', 'languages_url': 'https://api.github.com/repos/dolphin-emu/dolphin/languages', 'stargazers_url': 'https://api.github.com/repos/dolphin-emu/dolphin/stargazers', 'clone_url': 'https://github.com/dolphin-emu/dolphin.git', 'contributors_url': 'https://api.github.com/repos/dolphin-emu/dolphin/contributors', 'hooks_url': 'https://api.github.com/repos/dolphin-emu/dolphin/hooks', 'trees_url': 'https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}', 'notifications_url': 'https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}', 'releases_url': 'https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}'}, 'organization': {'public_members_url': 'https://api.github.com/orgs/dolphin-emu/public_members{/member}', 'issues_url': 'https://api.github.com/orgs/dolphin-emu/issues', 'avatar_url': 'https://avatars1.githubusercontent.com/u/5050316?v=3', 'url': 'https://api.github.com/orgs/dolphin-emu', 'login': 'dolphin-emu', 'hooks_url': 'https://api.github.com/orgs/dolphin-emu/hooks', 'repos_url': 'https://api.github.com/orgs/dolphin-emu/repos', 'id': 5050316, 'description': '', 'members_url': 'https://api.github.com/orgs/dolphin-emu/members{/member}', 'events_url': 'https://api.github.com/orgs/dolphin-emu/events'}, 'comment': {'issue_url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/5330', 'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/Armada651/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/2028870?v=3', 'url': 'https://api.github.com/users/Armada651', 'followers_url': 'https://api.github.com/users/Armada651/followers', 'gists_url': 'https://api.github.com/users/Armada651/gists{/gist_id}', 'type': 'User', 'id': 2028870, 'subscriptions_url': 'https://api.github.com/users/Armada651/subscriptions', 'received_events_url': 'https://api.github.com/users/Armada651/received_events', 'login': 'Armada651', 'html_url': 'https://github.com/Armada651', 'repos_url': 'https://api.github.com/users/Armada651/repos', 'starred_url': 'https://api.github.com/users/Armada651/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/Armada651/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/Armada651/events{/privacy}'}, 'url': 'https://api.github.com/repos/dolphin-emu/dolphin/issues/comments/297754052', 'updated_at': '2017-04-27T15:45:02Z', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5330#issuecomment-297754052', 'id': 297754052, 'created_at': '2017-04-27T15:45:02Z', 'body': "@lioncash It could potentially also affect GCC, according to the documentation it could also be affected by the system code page. So @Orphis suggested that the most reliable fix would be to just fix the source code.\r\n\r\nBut no one likes BOMs, so fixing the source code would imply adding a bunch of `\\u` and `u8` where necessary.\r\n\r\nI'm fine with either solution, though I prefer the compiler flag option."}}}

Recent 'gh_pull_request' events

2017-04-28T02:09:34.498011	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'master', 'safe_author': False, 'type': 'gh_pull_request', 'action': 'synchronize', 'title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name", 'id': 5323, 'base_sha': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'head_sha': 'ad0fab599aacd68ac66e9a4a6c75ce66e8f1a282'}
2017-04-27T20:38:42.822053	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332', 'author': 'spycrab', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'wiimote_casts', 'safe_author': False, 'type': 'gh_pull_request', 'action': 'synchronize', 'title': 'Remove C-style casts and const abuse in Wiimote* code', 'id': 5332, 'base_sha': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'head_sha': '79ef8248a2a18b87e695c54eebe23ebbbed02680'}
2017-04-27T20:36:43.334457	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5333', 'author': 'leoetlino', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'es-functions', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'synchronize', 'title': 'IOS/ES: Handle contexts properly', 'id': 5333, 'base_sha': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'head_sha': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575'}
2017-04-27T20:35:10.532328	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5333', 'author': 'leoetlino', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'es-functions', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'synchronize', 'title': 'IOS/ES: Handle contexts properly', 'id': 5333, 'base_sha': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'head_sha': '1137b57947a6f9f5fe5afbcbc4138f77bed96042'}
2017-04-27T19:54:23.763532	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5333', 'author': 'leoetlino', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'es-functions', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'opened', 'title': 'IOS/ES: Handle contexts properly', 'id': 5333, 'base_sha': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'head_sha': '106a587d5b5cc64223646b0287fc125c05122fa7'}
2017-04-27T19:22:58.085488	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332', 'author': 'spycrab', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'wiimote_casts', 'safe_author': False, 'type': 'gh_pull_request', 'action': 'opened', 'title': 'Remove C-style casts and const abuse in Wiimote* code', 'id': 5332, 'base_sha': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'head_sha': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634'}
2017-04-27T19:01:41.964224	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5265', 'author': 'JosJuice', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'android-banner-colors', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'closed', 'title': 'Fix banners on Android being the wrong color', 'id': 5265, 'base_sha': '0d98ffa2b29d0bf2227dc8514c42753ac5c4650f', 'head_sha': 'b485b1a94dd5409b626676bdbaf9b830e10d8bd3'}
2017-04-27T18:59:25.437795	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5331', 'author': 'degasus', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'fix_game_banners2', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'closed', 'title': '[Android] Fix game banners', 'id': 5331, 'base_sha': '8028564a0767680bef8f917654dba16d3626c869', 'head_sha': '1e73f3c76eb562d78b8c5bb0a0a9edf602f1dd9f'}
2017-04-27T18:46:35.549919	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/3671', 'author': 'bb010g', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'patch-1', 'safe_author': False, 'type': 'gh_pull_request', 'action': 'synchronize', 'title': 'Add EditorConfig', 'id': 3671, 'base_sha': '8028564a0767680bef8f917654dba16d3626c869', 'head_sha': '2d2e621058aa9a3ccda3ce3c14499e2fc96e6662'}
2017-04-27T18:42:39.959187	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5331', 'author': 'mahdihijazi', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'fix_game_banners2', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'opened', 'title': '[Android] Fix game banners', 'id': 5331, 'base_sha': '8028564a0767680bef8f917654dba16d3626c869', 'head_sha': '1e73f3c76eb562d78b8c5bb0a0a9edf602f1dd9f'}
2017-04-27T17:44:45.409721	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'master', 'safe_author': False, 'type': 'gh_pull_request', 'action': 'edited', 'title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name", 'id': 5323, 'base_sha': '8028564a0767680bef8f917654dba16d3626c869', 'head_sha': '806a69fc732e00e394e41809bb726114146efbca'}
2017-04-27T17:43:51.082154	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'master', 'safe_author': False, 'type': 'gh_pull_request', 'action': 'edited', 'title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name", 'id': 5323, 'base_sha': '8028564a0767680bef8f917654dba16d3626c869', 'head_sha': '806a69fc732e00e394e41809bb726114146efbca'}
2017-04-27T17:30:58.779101	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'master', 'safe_author': False, 'type': 'gh_pull_request', 'action': 'synchronize', 'title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name", 'id': 5323, 'base_sha': '8028564a0767680bef8f917654dba16d3626c869', 'head_sha': '806a69fc732e00e394e41809bb726114146efbca'}
2017-04-27T16:12:35.158313	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5329', 'author': 'leoetlino', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'clear', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'closed', 'title': 'IOS/ES: Drop unnecessary memset for vectors', 'id': 5329, 'base_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'head_sha': '65d37ee2dc5c968eaa6b46bf6dd926b2518f5697'}
2017-04-27T14:38:06.778628	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326', 'author': 'degasus', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'cr_cache', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'edited', 'title': '[RFC] JitArm64: Implement CR cache', 'id': 5326, 'base_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'head_sha': 'c5e8e3bccbe5377dc69e9e98d0f22327970c679f'}
2017-04-27T14:25:06.763374	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'master', 'safe_author': False, 'type': 'gh_pull_request', 'action': 'synchronize', 'title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name", 'id': 5323, 'base_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'head_sha': '878ac5bf567f2c806b853d8783f00372fbfe5968'}
2017-04-27T14:13:48.828327	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326', 'author': 'MerryMage', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'cr_cache', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'synchronize', 'title': '[RFC] JitArm64: Implement CR cache', 'id': 5326, 'base_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'head_sha': 'c5e8e3bccbe5377dc69e9e98d0f22327970c679f'}
2017-04-27T12:47:31.868382	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5330', 'author': 'Armada651', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'unicode-correctness', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'edited', 'title': 'Unicode correctness', 'id': 5330, 'base_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'head_sha': '6e360e6530dde3046952cf97187e986ce80d13c9'}
2017-04-27T12:46:06.292372	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5330', 'author': 'Armada651', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'unicode-correctness', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'edited', 'title': 'Unicode correctness', 'id': 5330, 'base_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'head_sha': '6e360e6530dde3046952cf97187e986ce80d13c9'}
2017-04-27T12:44:57.400770	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5330', 'author': 'Armada651', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'unicode-correctness', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'opened', 'title': 'Unicode correctness', 'id': 5330, 'base_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'head_sha': '6e360e6530dde3046952cf97187e986ce80d13c9'}
2017-04-27T11:38:09.934291	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326', 'author': 'MerryMage', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'cr_cache', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'synchronize', 'title': '[RFC] JitArm64: Implement CR cache', 'id': 5326, 'base_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'head_sha': 'b8261fb60b41f6176ec630417b31b2c765b23e06'}
2017-04-27T11:27:13.261378	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326', 'author': 'MerryMage', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'cr_cache', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'synchronize', 'title': '[RFC] JitArm64: Implement CR cache', 'id': 5326, 'base_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'head_sha': '87f7f716191aa5bba0c9d6c193375d0e3127582b'}
2017-04-27T09:41:39.941777	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5318', 'author': 'ligfx', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'cmakehidapi', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'synchronize', 'title': 'CMake: clean up HIDAPI build', 'id': 5318, 'base_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'head_sha': '537fbf33a711549d1563b877b57043d0ec789469'}
2017-04-26T22:08:21.233613	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5329', 'author': 'leoetlino', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'clear', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'opened', 'title': 'IOS/ES: Drop unnecessary memset for vectors', 'id': 5329, 'base_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'head_sha': '65d37ee2dc5c968eaa6b46bf6dd926b2518f5697'}
2017-04-26T21:58:54.890279	{'source': 'ghhookparser', 'base_ref_name': 'master', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5328', 'author': 'leoetlino', 'repo': 'dolphin-emu/dolphin', 'head_ref_name': 'wiimote-fix', 'safe_author': True, 'type': 'gh_pull_request', 'action': 'closed', 'title': 'Fix emulated Wiimotes', 'id': 5328, 'base_sha': 'aedfb5df32b47aa6e44b1109769674341c42eca1', 'head_sha': '4d42a098c32c7be45f826554b49179f199e65c73'}

Recent 'gh_pull_request_comment' events

2017-04-28T01:38:49.031971	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113837530', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': False, 'action': 'created', 'id': 5323, 'hash': '806a69fc732e00e394e41809bb726114146efbca'}
2017-04-28T01:30:37.234354	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113836463', 'author': 'sepalani', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5323, 'hash': '806a69fc732e00e394e41809bb726114146efbca'}
2017-04-28T00:19:05.433806	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113830324', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5326, 'hash': 'c5e8e3bccbe5377dc69e9e98d0f22327970c679f'}
2017-04-27T22:32:00.807915	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113817310', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5333, 'hash': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575'}
2017-04-27T22:32:00.807263	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113816757', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5333, 'hash': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575'}
2017-04-27T20:36:47.091199	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113796081', 'author': 'leoetlino', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': False, 'action': 'created', 'id': 5333, 'hash': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575'}
2017-04-27T20:21:00.836797	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790322', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5332, 'hash': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634'}
2017-04-27T20:21:00.672184	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790369', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5332, 'hash': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634'}
2017-04-27T20:21:00.671536	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790405', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5332, 'hash': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634'}
2017-04-27T20:21:00.670888	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790262', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5332, 'hash': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634'}
2017-04-27T20:21:00.084805	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790473', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5332, 'hash': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634'}
2017-04-27T20:21:00.081950	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790443', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5332, 'hash': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634'}
2017-04-27T20:04:19.791488	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113789187', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5333, 'hash': '106a587d5b5cc64223646b0287fc125c05122fa7'}
2017-04-27T18:21:35.443693	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113767799', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': False, 'action': 'created', 'id': 5323, 'hash': '806a69fc732e00e394e41809bb726114146efbca'}
2017-04-27T18:18:41.905817	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113767123', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': False, 'action': 'created', 'id': 5323, 'hash': '806a69fc732e00e394e41809bb726114146efbca'}
2017-04-27T17:47:10.731829	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113759761', 'author': 'JosJuice', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': False, 'action': 'created', 'id': 5323, 'hash': '806a69fc732e00e394e41809bb726114146efbca'}
2017-04-27T17:29:16.557023	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113756163', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': False, 'action': 'created', 'id': 5323, 'hash': '878ac5bf567f2c806b853d8783f00372fbfe5968'}
2017-04-27T17:16:52.186375	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113753341', 'author': 'spycrab', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': False, 'action': 'created', 'id': 5323, 'hash': '878ac5bf567f2c806b853d8783f00372fbfe5968'}
2017-04-27T17:11:51.619512	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113752188', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': False, 'action': 'edited', 'id': 5323, 'hash': '878ac5bf567f2c806b853d8783f00372fbfe5968'}
2017-04-27T17:11:39.330843	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113752188', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': False, 'action': 'created', 'id': 5323, 'hash': '878ac5bf567f2c806b853d8783f00372fbfe5968'}
2017-04-27T15:27:19.842972	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113727523', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5323, 'hash': '878ac5bf567f2c806b853d8783f00372fbfe5968'}
2017-04-27T14:28:53.970225	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113709851', 'author': 'JosJuice', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5323, 'hash': '878ac5bf567f2c806b853d8783f00372fbfe5968'}
2017-04-27T14:28:53.357365	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113709633', 'author': 'JosJuice', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': True, 'action': 'created', 'id': 5323, 'hash': '878ac5bf567f2c806b853d8783f00372fbfe5968'}
2017-04-27T13:09:48.428598	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113690268', 'author': 'degasus', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': False, 'action': 'edited', 'id': 5326, 'hash': 'b8261fb60b41f6176ec630417b31b2c765b23e06'}
2017-04-27T13:09:08.553441	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113690268', 'author': 'degasus', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_comment', 'is_part_of_review': False, 'action': 'created', 'id': 5326, 'hash': 'b8261fb60b41f6176ec630417b31b2c765b23e06'}

Recent 'gh_pull_request_review' events

2017-04-28T01:38:49.030799	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#pullrequestreview-35260336', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5323, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/ZexaronS/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/20824154?v=3', 'url': 'https://api.github.com/users/ZexaronS', 'followers_url': 'https://api.github.com/users/ZexaronS/followers', 'gists_url': 'https://api.github.com/users/ZexaronS/gists{/gist_id}', 'type': 'User', 'id': 20824154, 'subscriptions_url': 'https://api.github.com/users/ZexaronS/subscriptions', 'received_events_url': 'https://api.github.com/users/ZexaronS/received_events', 'login': 'ZexaronS', 'html_url': 'https://github.com/ZexaronS', 'repos_url': 'https://api.github.com/users/ZexaronS/repos', 'starred_url': 'https://api.github.com/users/ZexaronS/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/ZexaronS/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/ZexaronS/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113837530', 'updated_at': '2017-04-28T01:38:47Z', 'commit_id': '806a69fc732e00e394e41809bb726114146efbca', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35260336, 'original_position': 86, 'diff_hunk': '@@ -756,15 +756,15 @@ TextureCacheBase::TCacheEntryBase* TextureCacheBase::Load(const u32 stage)\n   }\n \n   // how many levels the allocated texture shall have\n-  const u32 texLevels = hires_tex ? (u32)hires_tex->m_levels.size() : tex_levels;\n+  const u32 texLevels = custom_tex ? (u32)custom_tex->m_levels.size() : tex_levels;', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113837530'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113837530'}}, 'position': 86, 'original_commit_id': '806a69fc732e00e394e41809bb726114146efbca', 'path': 'Source/Core/VideoCommon/TextureCacheBase.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113837530', 'id': 113837530, 'created_at': '2017-04-28T01:38:47Z', 'body': "This PR is actually my first ever contribution to any such sproject in the opensource git/github arena, I'm also not a real programmer and only know C++ basics, this change I believe would have to be consulted with others if they are okay with it being part of this PR, but then the Title and the PR message would not be valid anymore."}], 'pr_title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name"}
2017-04-28T01:30:37.226909	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#pullrequestreview-35259203', 'author': 'sepalani', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5323, 'state': 'changes_requested', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/7890055?v=3', 'url': 'https://api.github.com/users/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'type': 'User', 'id': 7890055, 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'login': 'sepalani', 'html_url': 'https://github.com/sepalani', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113836463', 'updated_at': '2017-04-28T01:30:35Z', 'commit_id': '806a69fc732e00e394e41809bb726114146efbca', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35259203, 'original_position': 86, 'diff_hunk': '@@ -756,15 +756,15 @@ TextureCacheBase::TCacheEntryBase* TextureCacheBase::Load(const u32 stage)\n   }\n \n   // how many levels the allocated texture shall have\n-  const u32 texLevels = hires_tex ? (u32)hires_tex->m_levels.size() : tex_levels;\n+  const u32 texLevels = custom_tex ? (u32)custom_tex->m_levels.size() : tex_levels;', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113836463'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113836463'}}, 'position': 86, 'original_commit_id': '806a69fc732e00e394e41809bb726114146efbca', 'path': 'Source/Core/VideoCommon/TextureCacheBase.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113836463', 'id': 113836463, 'created_at': '2017-04-28T01:24:48Z', 'body': '```static_cast``` instead of C cast ```(u32)```'}], 'pr_title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name"}
2017-04-28T01:30:36.675180	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#pullrequestreview-35259203', 'author': 'sepalani', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'edited', 'pr_id': 5323, 'state': 'pending', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/sepalani/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/7890055?v=3', 'url': 'https://api.github.com/users/sepalani', 'followers_url': 'https://api.github.com/users/sepalani/followers', 'gists_url': 'https://api.github.com/users/sepalani/gists{/gist_id}', 'type': 'User', 'id': 7890055, 'subscriptions_url': 'https://api.github.com/users/sepalani/subscriptions', 'received_events_url': 'https://api.github.com/users/sepalani/received_events', 'login': 'sepalani', 'html_url': 'https://github.com/sepalani', 'repos_url': 'https://api.github.com/users/sepalani/repos', 'starred_url': 'https://api.github.com/users/sepalani/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/sepalani/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/sepalani/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113836463', 'updated_at': '2017-04-28T01:30:35Z', 'commit_id': '806a69fc732e00e394e41809bb726114146efbca', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35259203, 'original_position': 86, 'diff_hunk': '@@ -756,15 +756,15 @@ TextureCacheBase::TCacheEntryBase* TextureCacheBase::Load(const u32 stage)\n   }\n \n   // how many levels the allocated texture shall have\n-  const u32 texLevels = hires_tex ? (u32)hires_tex->m_levels.size() : tex_levels;\n+  const u32 texLevels = custom_tex ? (u32)custom_tex->m_levels.size() : tex_levels;', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113836463'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113836463'}}, 'position': 86, 'original_commit_id': '806a69fc732e00e394e41809bb726114146efbca', 'path': 'Source/Core/VideoCommon/TextureCacheBase.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113836463', 'id': 113836463, 'created_at': '2017-04-28T01:24:48Z', 'body': '```static_cast``` instead of C cast ```(u32)```'}], 'pr_title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name"}
2017-04-28T00:19:05.426020	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326#pullrequestreview-35253163', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5326, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113830324', 'updated_at': '2017-04-28T00:19:03Z', 'commit_id': 'c5e8e3bccbe5377dc69e9e98d0f22327970c679f', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5326', 'pull_request_review_id': 35253163, 'original_position': 13, 'diff_hunk': '@@ -118,7 +117,9 @@ class HostReg\n class Arm64RegCache\n {\n public:\n-  Arm64RegCache() : m_emit(nullptr), m_float_emit(nullptr), m_reg_stats(nullptr){};\n+  Arm64RegCache(size_t guest_reg_count)', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113830324'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5326'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113830324'}}, 'position': 13, 'original_commit_id': 'c5e8e3bccbe5377dc69e9e98d0f22327970c679f', 'path': 'Source/Core/Core/PowerPC/JitArm64/JitArm64_RegCache.h', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113830324', 'id': 113830324, 'created_at': '2017-04-28T00:17:10Z', 'body': 'This should be `explicit`'}], 'pr_title': 'JitArm64: Implement CR cache'}
2017-04-28T00:19:04.885033	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326#pullrequestreview-35253163', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'edited', 'pr_id': 5326, 'state': 'pending', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113830324', 'updated_at': '2017-04-28T00:19:03Z', 'commit_id': 'c5e8e3bccbe5377dc69e9e98d0f22327970c679f', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5326', 'pull_request_review_id': 35253163, 'original_position': 13, 'diff_hunk': '@@ -118,7 +117,9 @@ class HostReg\n class Arm64RegCache\n {\n public:\n-  Arm64RegCache() : m_emit(nullptr), m_float_emit(nullptr), m_reg_stats(nullptr){};\n+  Arm64RegCache(size_t guest_reg_count)', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113830324'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5326'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113830324'}}, 'position': 13, 'original_commit_id': 'c5e8e3bccbe5377dc69e9e98d0f22327970c679f', 'path': 'Source/Core/Core/PowerPC/JitArm64/JitArm64_RegCache.h', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113830324', 'id': 113830324, 'created_at': '2017-04-28T00:17:10Z', 'body': 'This should be `explicit`'}], 'pr_title': 'JitArm64: Implement CR cache'}
2017-04-27T22:32:00.801157	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5333#pullrequestreview-35239196', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5333, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113816757', 'updated_at': '2017-04-27T22:31:58Z', 'commit_id': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333', 'pull_request_review_id': 35239196, 'original_position': 123, 'diff_hunk': '@@ -228,6 +260,8 @@ class ES final : public Device\n   IPCCommandResult DIGetTMDSize(const IOCtlVRequest& request);\n   IPCCommandResult DIGetTMD(const IOCtlVRequest& request);\n \n+  std::array<Context, 3>::iterator FindActiveContext(u32 fd);', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113816757'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113816757'}}, 'position': 123, 'original_commit_id': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575', 'path': 'Source/Core/Core/IOS/ES/ES.h', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113816757', 'id': 113816757, 'created_at': '2017-04-27T22:25:51Z', 'body': 'You can use a type alias here to avoid re-stating the same array bounds everywhere, i.e. under the Context struct you could do something like:\r\n\r\n```cpp\r\n// ES can only have 3 contexts at one time [Other necessary info]\r\nusing ContextArray = std::array<Context, 3>;\r\n```\r\n\r\nand then just use that.\r\n'}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113817310', 'updated_at': '2017-04-27T22:31:58Z', 'commit_id': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333', 'pull_request_review_id': 35239196, 'original_position': 113, 'diff_hunk': '@@ -322,65 +328,89 @@ void ES::DoState(PointerWrap& p)\n   }\n }\n \n+std::array<ES::Context, 3>::iterator ES::FindActiveContext(u32 fd)\n+{\n+  return std::find_if(m_contexts.begin(), m_contexts.end(),\n+                      [fd](const auto& context) { return context.ipc_fd == fd && context.active; });\n+}\n+\n ReturnCode ES::Open(const OpenRequest& request)\n {\n-  m_caller_uid = request.uid;\n-  m_caller_gid = request.gid;\n+  auto context =\n+      std::find_if(m_contexts.begin(), m_contexts.end(), [](const auto& c) { return !c.active; });', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113817310'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113817310'}}, 'position': 113, 'original_commit_id': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575', 'path': 'Source/Core/Core/IOS/ES/ES.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113817310', 'id': 113817310, 'created_at': '2017-04-27T22:29:28Z', 'body': 'I meant to point this out with the other find stuff, but I guess I forgot to actually comment on it (I should probably not review code at lunch time at work), but maybe extract this to a `FindInactiveContext`, for symmetry with `FindActiveContext`.'}], 'pr_title': 'IOS/ES: Handle contexts properly'}
2017-04-27T22:32:00.199659	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5333#pullrequestreview-35239196', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'edited', 'pr_id': 5333, 'state': 'pending', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113816757', 'updated_at': '2017-04-27T22:31:58Z', 'commit_id': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333', 'pull_request_review_id': 35239196, 'original_position': 123, 'diff_hunk': '@@ -228,6 +260,8 @@ class ES final : public Device\n   IPCCommandResult DIGetTMDSize(const IOCtlVRequest& request);\n   IPCCommandResult DIGetTMD(const IOCtlVRequest& request);\n \n+  std::array<Context, 3>::iterator FindActiveContext(u32 fd);', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113816757'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113816757'}}, 'position': 123, 'original_commit_id': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575', 'path': 'Source/Core/Core/IOS/ES/ES.h', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113816757', 'id': 113816757, 'created_at': '2017-04-27T22:25:51Z', 'body': 'You can use a type alias here to avoid re-stating the same array bounds everywhere, i.e. under the Context struct you could do something like:\r\n\r\n```cpp\r\n// ES can only have 3 contexts at one time [Other necessary info]\r\nusing ContextArray = std::array<Context, 3>;\r\n```\r\n\r\nand then just use that.\r\n'}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113817310', 'updated_at': '2017-04-27T22:31:58Z', 'commit_id': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333', 'pull_request_review_id': 35239196, 'original_position': 113, 'diff_hunk': '@@ -322,65 +328,89 @@ void ES::DoState(PointerWrap& p)\n   }\n }\n \n+std::array<ES::Context, 3>::iterator ES::FindActiveContext(u32 fd)\n+{\n+  return std::find_if(m_contexts.begin(), m_contexts.end(),\n+                      [fd](const auto& context) { return context.ipc_fd == fd && context.active; });\n+}\n+\n ReturnCode ES::Open(const OpenRequest& request)\n {\n-  m_caller_uid = request.uid;\n-  m_caller_gid = request.gid;\n+  auto context =\n+      std::find_if(m_contexts.begin(), m_contexts.end(), [](const auto& c) { return !c.active; });', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113817310'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113817310'}}, 'position': 113, 'original_commit_id': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575', 'path': 'Source/Core/Core/IOS/ES/ES.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113817310', 'id': 113817310, 'created_at': '2017-04-27T22:29:28Z', 'body': 'I meant to point this out with the other find stuff, but I guess I forgot to actually comment on it (I should probably not review code at lunch time at work), but maybe extract this to a `FindInactiveContext`, for symmetry with `FindActiveContext`.'}], 'pr_title': 'IOS/ES: Handle contexts properly'}
2017-04-27T20:36:47.090026	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5333#pullrequestreview-35216731', 'author': 'leoetlino', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5333, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/leoetlino/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/4209061?v=3', 'url': 'https://api.github.com/users/leoetlino', 'followers_url': 'https://api.github.com/users/leoetlino/followers', 'gists_url': 'https://api.github.com/users/leoetlino/gists{/gist_id}', 'type': 'User', 'id': 4209061, 'subscriptions_url': 'https://api.github.com/users/leoetlino/subscriptions', 'received_events_url': 'https://api.github.com/users/leoetlino/received_events', 'login': 'leoetlino', 'html_url': 'https://github.com/leoetlino', 'repos_url': 'https://api.github.com/users/leoetlino/repos', 'starred_url': 'https://api.github.com/users/leoetlino/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/leoetlino/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/leoetlino/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113796081', 'updated_at': '2017-04-27T20:36:45Z', 'commit_id': '4213ea1bb4e92bbf3a4824be0833aeb4c3678575', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333', 'pull_request_review_id': 35216731, 'original_position': 120, 'diff_hunk': '@@ -324,63 +330,84 @@ void ES::DoState(PointerWrap& p)\n \n ReturnCode ES::Open(const OpenRequest& request)\n {\n-  m_caller_uid = request.uid;\n-  m_caller_gid = request.gid;\n+  auto context =\n+      std::find_if(m_contexts.begin(), m_contexts.end(), [](const auto& c) { return !c.active; });\n+  if (context == m_contexts.end())\n+    return ES_FD_EXHAUSTED;\n+\n+  context->active = true;\n+  context->uid = request.uid;\n+  context->gid = request.gid;\n+  context->ipc_fd = request.fd;\n   return Device::Open(request);\n }\n \n-void ES::Close()\n+ReturnCode ES::Close(u32 fd)\n {\n-  // XXX: does IOS really clear the content access map here?\n+  auto context = std::find_if(m_contexts.begin(), m_contexts.end(),', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113796081'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113796081'}}, 'position': None, 'original_commit_id': '106a587d5b5cc64223646b0287fc125c05122fa7', 'path': 'Source/Core/Core/IOS/ES/ES.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113796081', 'id': 113796081, 'created_at': '2017-04-27T20:36:45Z', 'body': "Sure, I've moved it to its own function."}], 'pr_title': 'IOS/ES: Handle contexts properly'}
2017-04-27T20:21:00.668630	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332#pullrequestreview-35210033', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5332, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790262', 'updated_at': '2017-04-27T20:20:58Z', 'commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'pull_request_review_id': 35210033, 'original_position': 5, 'diff_hunk': '@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  (static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get()))->GetState(data);', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790262'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790262'}}, 'position': 5, 'original_commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'path': 'Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790262', 'id': 113790262, 'created_at': '2017-04-27T20:07:06Z', 'body': "The set of parentheses around the static_cast aren't necessary."}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790322', 'updated_at': '2017-04-27T20:20:58Z', 'commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'pull_request_review_id': 35210033, 'original_position': 14, 'diff_hunk': '@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return (static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get()))', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790322'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790322'}}, 'position': 14, 'original_commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'path': 'Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790322', 'id': 113790322, 'created_at': '2017-04-27T20:07:29Z', 'body': 'Ditto here as well.'}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790369', 'updated_at': '2017-04-27T20:20:58Z', 'commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'pull_request_review_id': 35210033, 'original_position': 5, 'diff_hunk': '@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  (reinterpret_cast<wm_buttons*>(data))->hex |= m_status.buttons.hex;', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790369'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790369'}}, 'position': 5, 'original_commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'path': 'Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790369', 'id': 113790369, 'created_at': '2017-04-27T20:07:46Z', 'body': 'Ditto'}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790405', 'updated_at': '2017-04-27T20:20:58Z', 'commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'pull_request_review_id': 35210033, 'original_position': 44, 'diff_hunk': '@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    (reinterpret_cast<wm_motionplus_data*>(data))->is_mp_data = 0;', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790405'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790405'}}, 'position': 44, 'original_commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'path': 'Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790405', 'id': 113790405, 'created_at': '2017-04-27T20:07:56Z', 'body': 'Ditto'}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790443', 'updated_at': '2017-04-27T20:20:58Z', 'commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'pull_request_review_id': 35210033, 'original_position': 79, 'diff_hunk': '@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    (reinterpret_cast<wm_buttons*>(real_data + real_rptf.core))->hex;', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790443'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790443'}}, 'position': 79, 'original_commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'path': 'Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790443', 'id': 113790443, 'created_at': '2017-04-27T20:08:08Z', 'body': 'Ditto.'}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790473', 'updated_at': '2017-04-27T20:20:58Z', 'commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'pull_request_review_id': 35210033, 'original_position': 89, 'diff_hunk': '@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              (reinterpret_cast<wm_status_report*>(real_data + 2))->extension = 1;', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790473'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790473'}}, 'position': 89, 'original_commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'path': 'Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790473', 'id': 113790473, 'created_at': '2017-04-27T20:08:14Z', 'body': 'Ditto.'}], 'pr_title': 'Remove C-style casts and const abuse in Wiimote* code'}
2017-04-27T20:21:00.073893	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5332#pullrequestreview-35210033', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'edited', 'pr_id': 5332, 'state': 'pending', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790262', 'updated_at': '2017-04-27T20:20:58Z', 'commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'pull_request_review_id': 35210033, 'original_position': 5, 'diff_hunk': '@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  (static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get()))->GetState(data);', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790262'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790262'}}, 'position': 5, 'original_commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'path': 'Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790262', 'id': 113790262, 'created_at': '2017-04-27T20:07:06Z', 'body': "The set of parentheses around the static_cast aren't necessary."}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790322', 'updated_at': '2017-04-27T20:20:58Z', 'commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'pull_request_review_id': 35210033, 'original_position': 14, 'diff_hunk': '@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return (static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get()))', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790322'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790322'}}, 'position': 14, 'original_commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'path': 'Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790322', 'id': 113790322, 'created_at': '2017-04-27T20:07:29Z', 'body': 'Ditto here as well.'}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790369', 'updated_at': '2017-04-27T20:20:58Z', 'commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'pull_request_review_id': 35210033, 'original_position': 5, 'diff_hunk': '@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  (reinterpret_cast<wm_buttons*>(data))->hex |= m_status.buttons.hex;', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790369'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790369'}}, 'position': 5, 'original_commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'path': 'Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790369', 'id': 113790369, 'created_at': '2017-04-27T20:07:46Z', 'body': 'Ditto'}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790405', 'updated_at': '2017-04-27T20:20:58Z', 'commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'pull_request_review_id': 35210033, 'original_position': 44, 'diff_hunk': '@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    (reinterpret_cast<wm_motionplus_data*>(data))->is_mp_data = 0;', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790405'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790405'}}, 'position': 44, 'original_commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'path': 'Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790405', 'id': 113790405, 'created_at': '2017-04-27T20:07:56Z', 'body': 'Ditto'}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790443', 'updated_at': '2017-04-27T20:20:58Z', 'commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'pull_request_review_id': 35210033, 'original_position': 79, 'diff_hunk': '@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    (reinterpret_cast<wm_buttons*>(real_data + real_rptf.core))->hex;', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790443'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790443'}}, 'position': 79, 'original_commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'path': 'Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790443', 'id': 113790443, 'created_at': '2017-04-27T20:08:08Z', 'body': 'Ditto.'}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790473', 'updated_at': '2017-04-27T20:20:58Z', 'commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332', 'pull_request_review_id': 35210033, 'original_position': 89, 'diff_hunk': '@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              (reinterpret_cast<wm_status_report*>(real_data + 2))->extension = 1;', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790473'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5332'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113790473'}}, 'position': 89, 'original_commit_id': 'e9f1203e77b316a54ead06dfcfc28f8e019e3634', 'path': 'Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5332#discussion_r113790473', 'id': 113790473, 'created_at': '2017-04-27T20:08:14Z', 'body': 'Ditto.'}], 'pr_title': 'Remove C-style casts and const abuse in Wiimote* code'}
2017-04-27T20:04:20.317892	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5333#pullrequestreview-35208824', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5333, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113789187', 'updated_at': '2017-04-27T20:04:18Z', 'commit_id': '106a587d5b5cc64223646b0287fc125c05122fa7', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333', 'pull_request_review_id': 35208824, 'original_position': 120, 'diff_hunk': '@@ -324,63 +330,84 @@ void ES::DoState(PointerWrap& p)\n \n ReturnCode ES::Open(const OpenRequest& request)\n {\n-  m_caller_uid = request.uid;\n-  m_caller_gid = request.gid;\n+  auto context =\n+      std::find_if(m_contexts.begin(), m_contexts.end(), [](const auto& c) { return !c.active; });\n+  if (context == m_contexts.end())\n+    return ES_FD_EXHAUSTED;\n+\n+  context->active = true;\n+  context->uid = request.uid;\n+  context->gid = request.gid;\n+  context->ipc_fd = request.fd;\n   return Device::Open(request);\n }\n \n-void ES::Close()\n+ReturnCode ES::Close(u32 fd)\n {\n-  // XXX: does IOS really clear the content access map here?\n+  auto context = std::find_if(m_contexts.begin(), m_contexts.end(),', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113789187'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113789187'}}, 'position': 120, 'original_commit_id': '106a587d5b5cc64223646b0287fc125c05122fa7', 'path': 'Source/Core/Core/IOS/ES/ES.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113789187', 'id': 113789187, 'created_at': '2017-04-27T20:01:50Z', 'body': "This and the `find_if` in IOCtlV() appear to do the same thing, just with different captures. Can it not be moved to it's own `<whatever  the iterator type is> FindFirstActiveContext(u32 fd)` function? (using whatever name is more appropriate)?"}], 'pr_title': 'IOS/ES: Handle contexts properly'}
2017-04-27T20:04:19.783684	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5333#pullrequestreview-35208824', 'author': 'lioncash', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'edited', 'pr_id': 5333, 'state': 'pending', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/lioncash/orgs', 'avatar_url': 'https://avatars2.githubusercontent.com/u/712067?v=3', 'url': 'https://api.github.com/users/lioncash', 'followers_url': 'https://api.github.com/users/lioncash/followers', 'gists_url': 'https://api.github.com/users/lioncash/gists{/gist_id}', 'type': 'User', 'id': 712067, 'subscriptions_url': 'https://api.github.com/users/lioncash/subscriptions', 'received_events_url': 'https://api.github.com/users/lioncash/received_events', 'login': 'lioncash', 'html_url': 'https://github.com/lioncash', 'repos_url': 'https://api.github.com/users/lioncash/repos', 'starred_url': 'https://api.github.com/users/lioncash/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/lioncash/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/lioncash/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113789187', 'updated_at': '2017-04-27T20:04:18Z', 'commit_id': '106a587d5b5cc64223646b0287fc125c05122fa7', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333', 'pull_request_review_id': 35208824, 'original_position': 120, 'diff_hunk': '@@ -324,63 +330,84 @@ void ES::DoState(PointerWrap& p)\n \n ReturnCode ES::Open(const OpenRequest& request)\n {\n-  m_caller_uid = request.uid;\n-  m_caller_gid = request.gid;\n+  auto context =\n+      std::find_if(m_contexts.begin(), m_contexts.end(), [](const auto& c) { return !c.active; });\n+  if (context == m_contexts.end())\n+    return ES_FD_EXHAUSTED;\n+\n+  context->active = true;\n+  context->uid = request.uid;\n+  context->gid = request.gid;\n+  context->ipc_fd = request.fd;\n   return Device::Open(request);\n }\n \n-void ES::Close()\n+ReturnCode ES::Close(u32 fd)\n {\n-  // XXX: does IOS really clear the content access map here?\n+  auto context = std::find_if(m_contexts.begin(), m_contexts.end(),', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113789187'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5333'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113789187'}}, 'position': 120, 'original_commit_id': '106a587d5b5cc64223646b0287fc125c05122fa7', 'path': 'Source/Core/Core/IOS/ES/ES.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5333#discussion_r113789187', 'id': 113789187, 'created_at': '2017-04-27T20:01:50Z', 'body': "This and the `find_if` in IOCtlV() appear to do the same thing, just with different captures. Can it not be moved to it's own `<whatever  the iterator type is> FindFirstActiveContext(u32 fd)` function? (using whatever name is more appropriate)?"}], 'pr_title': 'IOS/ES: Handle contexts properly'}
2017-04-27T18:21:36.162183	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#pullrequestreview-35185234', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5323, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/ZexaronS/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/20824154?v=3', 'url': 'https://api.github.com/users/ZexaronS', 'followers_url': 'https://api.github.com/users/ZexaronS/followers', 'gists_url': 'https://api.github.com/users/ZexaronS/gists{/gist_id}', 'type': 'User', 'id': 20824154, 'subscriptions_url': 'https://api.github.com/users/ZexaronS/subscriptions', 'received_events_url': 'https://api.github.com/users/ZexaronS/received_events', 'login': 'ZexaronS', 'html_url': 'https://github.com/ZexaronS', 'repos_url': 'https://api.github.com/users/ZexaronS/repos', 'starred_url': 'https://api.github.com/users/ZexaronS/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/ZexaronS/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/ZexaronS/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113767799', 'updated_at': '2017-04-27T18:21:34Z', 'commit_id': '806a69fc732e00e394e41809bb726114146efbca', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35185234, 'original_position': 10, 'diff_hunk': '@@ -69,9 +69,12 @@ void VideoConfig::Load(const std::string& ini_file)\n   settings->Get("OverlayStats", &bOverlayStats, false);\n   settings->Get("OverlayProjStats", &bOverlayProjStats, false);\n   settings->Get("DumpTextures", &bDumpTextures, false);\n-  settings->Get("HiresTextures", &bHiresTextures, false);\n-  settings->Get("ConvertHiresTextures", &bConvertHiresTextures, false);\n-  settings->Get("CacheHiresTextures", &bCacheHiresTextures, false);\n+  if (!settings->Get("CustomTextures", &bCustomTextures, false))\n+  {\n+\t  settings->Get("HiresTextures", &bCustomTextures, false);\n+  }', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113767799'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113767799'}}, 'position': None, 'original_commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'path': 'Source/Core/VideoCommon/VideoConfig.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113767799', 'id': 113767799, 'created_at': '2017-04-27T18:21:34Z', 'body': 'Ah, I get it now, many spaces instead of tabs.'}], 'pr_title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name"}
2017-04-27T18:18:42.468561	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#pullrequestreview-35184506', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5323, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/ZexaronS/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/20824154?v=3', 'url': 'https://api.github.com/users/ZexaronS', 'followers_url': 'https://api.github.com/users/ZexaronS/followers', 'gists_url': 'https://api.github.com/users/ZexaronS/gists{/gist_id}', 'type': 'User', 'id': 20824154, 'subscriptions_url': 'https://api.github.com/users/ZexaronS/subscriptions', 'received_events_url': 'https://api.github.com/users/ZexaronS/received_events', 'login': 'ZexaronS', 'html_url': 'https://github.com/ZexaronS', 'repos_url': 'https://api.github.com/users/ZexaronS/repos', 'starred_url': 'https://api.github.com/users/ZexaronS/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/ZexaronS/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/ZexaronS/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113767123', 'updated_at': '2017-04-27T18:18:41Z', 'commit_id': '806a69fc732e00e394e41809bb726114146efbca', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35184506, 'original_position': 10, 'diff_hunk': '@@ -69,9 +69,12 @@ void VideoConfig::Load(const std::string& ini_file)\n   settings->Get("OverlayStats", &bOverlayStats, false);\n   settings->Get("OverlayProjStats", &bOverlayProjStats, false);\n   settings->Get("DumpTextures", &bDumpTextures, false);\n-  settings->Get("HiresTextures", &bHiresTextures, false);\n-  settings->Get("ConvertHiresTextures", &bConvertHiresTextures, false);\n-  settings->Get("CacheHiresTextures", &bCacheHiresTextures, false);\n+  if (!settings->Get("CustomTextures", &bCustomTextures, false))\n+  {\n+\t  settings->Get("HiresTextures", &bCustomTextures, false);\n+  }', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113767123'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113767123'}}, 'position': None, 'original_commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'path': 'Source/Core/VideoCommon/VideoConfig.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113767123', 'id': 113767123, 'created_at': '2017-04-27T18:18:41Z', 'body': "Well all the code I see in VisualStudio looks as I expected it to. Maybe it auto-adds the look even if there's no actual tab in the raw files."}], 'pr_title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name"}
2017-04-27T17:47:10.727083	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#pullrequestreview-35176476', 'author': 'JosJuice', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5323, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113759761', 'updated_at': '2017-04-27T17:47:09Z', 'commit_id': '806a69fc732e00e394e41809bb726114146efbca', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35176476, 'original_position': 10, 'diff_hunk': '@@ -69,9 +69,12 @@ void VideoConfig::Load(const std::string& ini_file)\n   settings->Get("OverlayStats", &bOverlayStats, false);\n   settings->Get("OverlayProjStats", &bOverlayProjStats, false);\n   settings->Get("DumpTextures", &bDumpTextures, false);\n-  settings->Get("HiresTextures", &bHiresTextures, false);\n-  settings->Get("ConvertHiresTextures", &bConvertHiresTextures, false);\n-  settings->Get("CacheHiresTextures", &bCacheHiresTextures, false);\n+  if (!settings->Get("CustomTextures", &bCustomTextures, false))\n+  {\n+\t  settings->Get("HiresTextures", &bCustomTextures, false);\n+  }', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113759761'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113759761'}}, 'position': None, 'original_commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'path': 'Source/Core/VideoCommon/VideoConfig.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113759761', 'id': 113759761, 'created_at': '2017-04-27T17:47:09Z', 'body': "> I see a lot of tabs everwhere else.\r\n\r\nThere are no tabs in Dolphin's C++ code. We use spaces for indentation."}], 'pr_title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name"}
2017-04-27T17:29:17.161229	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#pullrequestreview-35172354', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5323, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/ZexaronS/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/20824154?v=3', 'url': 'https://api.github.com/users/ZexaronS', 'followers_url': 'https://api.github.com/users/ZexaronS/followers', 'gists_url': 'https://api.github.com/users/ZexaronS/gists{/gist_id}', 'type': 'User', 'id': 20824154, 'subscriptions_url': 'https://api.github.com/users/ZexaronS/subscriptions', 'received_events_url': 'https://api.github.com/users/ZexaronS/received_events', 'login': 'ZexaronS', 'html_url': 'https://github.com/ZexaronS', 'repos_url': 'https://api.github.com/users/ZexaronS/repos', 'starred_url': 'https://api.github.com/users/ZexaronS/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/ZexaronS/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/ZexaronS/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113756163', 'updated_at': '2017-04-27T17:29:15Z', 'commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35172354, 'original_position': 10, 'diff_hunk': '@@ -69,9 +69,12 @@ void VideoConfig::Load(const std::string& ini_file)\n   settings->Get("OverlayStats", &bOverlayStats, false);\n   settings->Get("OverlayProjStats", &bOverlayProjStats, false);\n   settings->Get("DumpTextures", &bDumpTextures, false);\n-  settings->Get("HiresTextures", &bHiresTextures, false);\n-  settings->Get("ConvertHiresTextures", &bConvertHiresTextures, false);\n-  settings->Get("CacheHiresTextures", &bCacheHiresTextures, false);\n+  if (!settings->Get("CustomTextures", &bCustomTextures, false))\n+  {\n+\t  settings->Get("HiresTextures", &bCustomTextures, false);\n+  }', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113756163'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113756163'}}, 'position': 10, 'original_commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'path': 'Source/Core/VideoCommon/VideoConfig.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113756163', 'id': 113756163, 'created_at': '2017-04-27T17:29:15Z', 'body': '@spycrab Ah, I should have go through and study that. Thanks'}], 'pr_title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name"}
2017-04-27T17:16:52.184897	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#pullrequestreview-35169373', 'author': 'spycrab', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5323, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/spycrab/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/1440715?v=3', 'url': 'https://api.github.com/users/spycrab', 'followers_url': 'https://api.github.com/users/spycrab/followers', 'gists_url': 'https://api.github.com/users/spycrab/gists{/gist_id}', 'type': 'User', 'id': 1440715, 'subscriptions_url': 'https://api.github.com/users/spycrab/subscriptions', 'received_events_url': 'https://api.github.com/users/spycrab/received_events', 'login': 'spycrab', 'html_url': 'https://github.com/spycrab', 'repos_url': 'https://api.github.com/users/spycrab/repos', 'starred_url': 'https://api.github.com/users/spycrab/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/spycrab/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/spycrab/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113753341', 'updated_at': '2017-04-27T17:16:50Z', 'commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35169373, 'original_position': 10, 'diff_hunk': '@@ -69,9 +69,12 @@ void VideoConfig::Load(const std::string& ini_file)\n   settings->Get("OverlayStats", &bOverlayStats, false);\n   settings->Get("OverlayProjStats", &bOverlayProjStats, false);\n   settings->Get("DumpTextures", &bDumpTextures, false);\n-  settings->Get("HiresTextures", &bHiresTextures, false);\n-  settings->Get("ConvertHiresTextures", &bConvertHiresTextures, false);\n-  settings->Get("CacheHiresTextures", &bCacheHiresTextures, false);\n+  if (!settings->Get("CustomTextures", &bCustomTextures, false))\n+  {\n+\t  settings->Get("HiresTextures", &bCustomTextures, false);\n+  }', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113753341'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113753341'}}, 'position': 10, 'original_commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'path': 'Source/Core/VideoCommon/VideoConfig.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113753341', 'id': 113753341, 'created_at': '2017-04-27T17:16:50Z', 'body': '@ZexaronS [The reason is that it is part of Dolphin\'s Coding Style Guidelines](https://github.com/dolphin-emu/dolphin/blob/master/Contributing.md#conditionals).\r\n\r\nAlso [this](https://stackoverflow.com/questions/14167033/visual-studio-replace-tab-with-4-spaces/14167067) is the first result when you [USE A SEARCH ENGINE OF YOUR CHOICE] "visual studio space tab". Really not that hard.'}], 'pr_title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name"}
2017-04-27T17:11:40.107132	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#pullrequestreview-35168114', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5323, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/ZexaronS/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/20824154?v=3', 'url': 'https://api.github.com/users/ZexaronS', 'followers_url': 'https://api.github.com/users/ZexaronS/followers', 'gists_url': 'https://api.github.com/users/ZexaronS/gists{/gist_id}', 'type': 'User', 'id': 20824154, 'subscriptions_url': 'https://api.github.com/users/ZexaronS/subscriptions', 'received_events_url': 'https://api.github.com/users/ZexaronS/received_events', 'login': 'ZexaronS', 'html_url': 'https://github.com/ZexaronS', 'repos_url': 'https://api.github.com/users/ZexaronS/repos', 'starred_url': 'https://api.github.com/users/ZexaronS/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/ZexaronS/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/ZexaronS/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113752188', 'updated_at': '2017-04-27T17:11:38Z', 'commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35168114, 'original_position': 10, 'diff_hunk': '@@ -69,9 +69,12 @@ void VideoConfig::Load(const std::string& ini_file)\n   settings->Get("OverlayStats", &bOverlayStats, false);\n   settings->Get("OverlayProjStats", &bOverlayProjStats, false);\n   settings->Get("DumpTextures", &bDumpTextures, false);\n-  settings->Get("HiresTextures", &bHiresTextures, false);\n-  settings->Get("ConvertHiresTextures", &bConvertHiresTextures, false);\n-  settings->Get("CacheHiresTextures", &bCacheHiresTextures, false);\n+  if (!settings->Get("CustomTextures", &bCustomTextures, false))\n+  {\n+\t  settings->Get("HiresTextures", &bCustomTextures, false);\n+  }', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113752188'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113752188'}}, 'position': 10, 'original_commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'path': 'Source/Core/VideoCommon/VideoConfig.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113752188', 'id': 113752188, 'created_at': '2017-04-27T17:11:38Z', 'body': "While I'm trying to figure out how to do this .. What kind of technical reason is behind this requirement? I see a lot of tabs everwhere else."}], 'pr_title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name"}
2017-04-27T15:27:20.561551	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#pullrequestreview-35141221', 'author': 'ZexaronS', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5323, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/ZexaronS/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/20824154?v=3', 'url': 'https://api.github.com/users/ZexaronS', 'followers_url': 'https://api.github.com/users/ZexaronS/followers', 'gists_url': 'https://api.github.com/users/ZexaronS/gists{/gist_id}', 'type': 'User', 'id': 20824154, 'subscriptions_url': 'https://api.github.com/users/ZexaronS/subscriptions', 'received_events_url': 'https://api.github.com/users/ZexaronS/received_events', 'login': 'ZexaronS', 'html_url': 'https://github.com/ZexaronS', 'repos_url': 'https://api.github.com/users/ZexaronS/repos', 'starred_url': 'https://api.github.com/users/ZexaronS/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/ZexaronS/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/ZexaronS/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113727523', 'updated_at': '2017-04-27T15:27:19Z', 'commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35141221, 'original_position': 10, 'diff_hunk': '@@ -69,9 +69,12 @@ void VideoConfig::Load(const std::string& ini_file)\n   settings->Get("OverlayStats", &bOverlayStats, false);\n   settings->Get("OverlayProjStats", &bOverlayProjStats, false);\n   settings->Get("DumpTextures", &bDumpTextures, false);\n-  settings->Get("HiresTextures", &bHiresTextures, false);\n-  settings->Get("ConvertHiresTextures", &bConvertHiresTextures, false);\n-  settings->Get("CacheHiresTextures", &bCacheHiresTextures, false);\n+  if (!settings->Get("CustomTextures", &bCustomTextures, false))\n+  {\n+\t  settings->Get("HiresTextures", &bCustomTextures, false);\n+  }', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113727523'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113727523'}}, 'position': 10, 'original_commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'path': 'Source/Core/VideoCommon/VideoConfig.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113727523', 'id': 113727523, 'created_at': '2017-04-27T15:27:18Z', 'body': 'So I need custom behavior for VisualStudio or what.'}], 'pr_title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name"}
2017-04-27T14:28:53.963118	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#pullrequestreview-35121422', 'author': 'JosJuice', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5323, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113709633', 'updated_at': '2017-04-27T14:28:51Z', 'commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35121422, 'original_position': 12, 'diff_hunk': '@@ -69,9 +69,12 @@ void VideoConfig::Load(const std::string& ini_file)\n   settings->Get("OverlayStats", &bOverlayStats, false);\n   settings->Get("OverlayProjStats", &bOverlayProjStats, false);\n   settings->Get("DumpTextures", &bDumpTextures, false);\n-  settings->Get("HiresTextures", &bHiresTextures, false);\n-  settings->Get("ConvertHiresTextures", &bConvertHiresTextures, false);\n-  settings->Get("CacheHiresTextures", &bCacheHiresTextures, false);\n+  if (!settings->Get("CustomTextures", &bCustomTextures, false))\n+  {\n+\t  settings->Get("HiresTextures", &bCustomTextures, false);\n+  }\n+  settings->Get("ConvertCustomTextures", &bConvertCustomTextures, false);\n+  settings->Get("CacheCustomTextures", &bCacheCustomTextures, false);', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113709633'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113709633'}}, 'position': 12, 'original_commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'path': 'Source/Core/VideoCommon/VideoConfig.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113709633', 'id': 113709633, 'created_at': '2017-04-27T14:27:47Z', 'body': 'If you\'re going to have migration code for "CustomTextures", you are also supposed to have migration code for "ConvertCustomTextures" and "CacheCustomTextures".'}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113709851', 'updated_at': '2017-04-27T14:28:51Z', 'commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35121422, 'original_position': 10, 'diff_hunk': '@@ -69,9 +69,12 @@ void VideoConfig::Load(const std::string& ini_file)\n   settings->Get("OverlayStats", &bOverlayStats, false);\n   settings->Get("OverlayProjStats", &bOverlayProjStats, false);\n   settings->Get("DumpTextures", &bDumpTextures, false);\n-  settings->Get("HiresTextures", &bHiresTextures, false);\n-  settings->Get("ConvertHiresTextures", &bConvertHiresTextures, false);\n-  settings->Get("CacheHiresTextures", &bCacheHiresTextures, false);\n+  if (!settings->Get("CustomTextures", &bCustomTextures, false))\n+  {\n+\t  settings->Get("HiresTextures", &bCustomTextures, false);\n+  }', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113709851'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113709851'}}, 'position': 10, 'original_commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'path': 'Source/Core/VideoCommon/VideoConfig.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113709851', 'id': 113709851, 'created_at': '2017-04-27T14:28:32Z', 'body': "Since the body of this `if` only is one line, you shouldn't use braces.\r\n\r\nAlso, don't use tabs."}], 'pr_title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name"}
2017-04-27T14:28:53.349493	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5323#pullrequestreview-35121422', 'author': 'JosJuice', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'edited', 'pr_id': 5323, 'state': 'pending', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113709633', 'updated_at': '2017-04-27T14:28:51Z', 'commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35121422, 'original_position': 12, 'diff_hunk': '@@ -69,9 +69,12 @@ void VideoConfig::Load(const std::string& ini_file)\n   settings->Get("OverlayStats", &bOverlayStats, false);\n   settings->Get("OverlayProjStats", &bOverlayProjStats, false);\n   settings->Get("DumpTextures", &bDumpTextures, false);\n-  settings->Get("HiresTextures", &bHiresTextures, false);\n-  settings->Get("ConvertHiresTextures", &bConvertHiresTextures, false);\n-  settings->Get("CacheHiresTextures", &bCacheHiresTextures, false);\n+  if (!settings->Get("CustomTextures", &bCustomTextures, false))\n+  {\n+\t  settings->Get("HiresTextures", &bCustomTextures, false);\n+  }\n+  settings->Get("ConvertCustomTextures", &bConvertCustomTextures, false);\n+  settings->Get("CacheCustomTextures", &bCacheCustomTextures, false);', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113709633'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113709633'}}, 'position': 12, 'original_commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'path': 'Source/Core/VideoCommon/VideoConfig.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113709633', 'id': 113709633, 'created_at': '2017-04-27T14:27:47Z', 'body': 'If you\'re going to have migration code for "CustomTextures", you are also supposed to have migration code for "ConvertCustomTextures" and "CacheCustomTextures".'}, {'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/JosJuice/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/6716818?v=3', 'url': 'https://api.github.com/users/JosJuice', 'followers_url': 'https://api.github.com/users/JosJuice/followers', 'gists_url': 'https://api.github.com/users/JosJuice/gists{/gist_id}', 'type': 'User', 'id': 6716818, 'subscriptions_url': 'https://api.github.com/users/JosJuice/subscriptions', 'received_events_url': 'https://api.github.com/users/JosJuice/received_events', 'login': 'JosJuice', 'html_url': 'https://github.com/JosJuice', 'repos_url': 'https://api.github.com/users/JosJuice/repos', 'starred_url': 'https://api.github.com/users/JosJuice/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/JosJuice/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/JosJuice/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113709851', 'updated_at': '2017-04-27T14:28:51Z', 'commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323', 'pull_request_review_id': 35121422, 'original_position': 10, 'diff_hunk': '@@ -69,9 +69,12 @@ void VideoConfig::Load(const std::string& ini_file)\n   settings->Get("OverlayStats", &bOverlayStats, false);\n   settings->Get("OverlayProjStats", &bOverlayProjStats, false);\n   settings->Get("DumpTextures", &bDumpTextures, false);\n-  settings->Get("HiresTextures", &bHiresTextures, false);\n-  settings->Get("ConvertHiresTextures", &bConvertHiresTextures, false);\n-  settings->Get("CacheHiresTextures", &bCacheHiresTextures, false);\n+  if (!settings->Get("CustomTextures", &bCustomTextures, false))\n+  {\n+\t  settings->Get("HiresTextures", &bCustomTextures, false);\n+  }', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113709851'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5323'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113709851'}}, 'position': 10, 'original_commit_id': '878ac5bf567f2c806b853d8783f00372fbfe5968', 'path': 'Source/Core/VideoCommon/VideoConfig.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5323#discussion_r113709851', 'id': 113709851, 'created_at': '2017-04-27T14:28:32Z', 'body': "Since the body of this `if` only is one line, you shouldn't use braces.\r\n\r\nAlso, don't use tabs."}], 'pr_title': "Misc: Rename HiresTextures to CustomTextures - doesn't really affect anything other than a name"}
2017-04-27T13:09:09.431147	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326#pullrequestreview-35100092', 'author': 'degasus', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5326, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/degasus/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/2787141?v=3', 'url': 'https://api.github.com/users/degasus', 'followers_url': 'https://api.github.com/users/degasus/followers', 'gists_url': 'https://api.github.com/users/degasus/gists{/gist_id}', 'type': 'User', 'id': 2787141, 'subscriptions_url': 'https://api.github.com/users/degasus/subscriptions', 'received_events_url': 'https://api.github.com/users/degasus/received_events', 'login': 'degasus', 'html_url': 'https://github.com/degasus', 'repos_url': 'https://api.github.com/users/degasus/repos', 'starred_url': 'https://api.github.com/users/degasus/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/degasus/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/degasus/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113690268', 'updated_at': '2017-04-27T13:09:07Z', 'commit_id': 'b8261fb60b41f6176ec630417b31b2c765b23e06', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5326', 'pull_request_review_id': 35100092, 'original_position': 110, 'diff_hunk': '@@ -143,26 +182,40 @@ void Arm64GPRCache::FlushRegister(size_t preg, bool maintain_state)\n \n void Arm64GPRCache::FlushRegisters(BitSet32 regs, bool maintain_state)\n {\n+  const auto adjacent_registers = [&](size_t index){\n+    if (index + 1 >= m_guest_registers.size())\n+      return false;\n+\n+    GuestRegInfo guest_reg_1 = GetGuestByIndex(index);\n+    GuestRegInfo guest_reg_2 = GetGuestByIndex(index + 1);\n+\n+    if (guest_reg_1.bitsize != guest_reg_2.bitsize)\n+      return false;\n+\n+    size_t byte_size = guest_reg_1.bitsize / 8;\n+    return guest_reg_2.ppc_offset == guest_reg_1.ppc_offset + byte_size;\n+  };\n+\n   for (size_t i = 0; i < m_guest_registers.size(); ++i)\n   {\n     if (regs[i])', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113690268'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5326'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113690268'}}, 'position': 110, 'original_commit_id': '87f7f716191aa5bba0c9d6c193375d0e3127582b', 'path': 'Source/Core/Core/PowerPC/JitArm64/JitArm64_RegCache.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113690268', 'id': 113690268, 'created_at': '2017-04-27T13:09:07Z', 'body': 'I think it is also fine to flush all CR regs here. This bitfield is AFAIK only used to not flush a temporary register within load-store instructions.'}], 'pr_title': '[RFC] JitArm64: Implement CR cache'}
2017-04-27T12:36:01.422883	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326#pullrequestreview-35092696', 'author': 'MerryMage', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5326, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/MerryMage/orgs', 'avatar_url': 'https://avatars1.githubusercontent.com/u/8682882?v=3', 'url': 'https://api.github.com/users/MerryMage', 'followers_url': 'https://api.github.com/users/MerryMage/followers', 'gists_url': 'https://api.github.com/users/MerryMage/gists{/gist_id}', 'type': 'User', 'id': 8682882, 'subscriptions_url': 'https://api.github.com/users/MerryMage/subscriptions', 'received_events_url': 'https://api.github.com/users/MerryMage/received_events', 'login': 'MerryMage', 'html_url': 'https://github.com/MerryMage', 'repos_url': 'https://api.github.com/users/MerryMage/repos', 'starred_url': 'https://api.github.com/users/MerryMage/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/MerryMage/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/MerryMage/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113683825', 'updated_at': '2017-04-27T12:35:59Z', 'commit_id': 'b8261fb60b41f6176ec630417b31b2c765b23e06', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5326', 'pull_request_review_id': 35092696, 'original_position': 110, 'diff_hunk': '@@ -143,26 +182,40 @@ void Arm64GPRCache::FlushRegister(size_t preg, bool maintain_state)\n \n void Arm64GPRCache::FlushRegisters(BitSet32 regs, bool maintain_state)\n {\n+  const auto adjacent_registers = [&](size_t index){\n+    if (index + 1 >= m_guest_registers.size())\n+      return false;\n+\n+    GuestRegInfo guest_reg_1 = GetGuestByIndex(index);\n+    GuestRegInfo guest_reg_2 = GetGuestByIndex(index + 1);\n+\n+    if (guest_reg_1.bitsize != guest_reg_2.bitsize)\n+      return false;\n+\n+    size_t byte_size = guest_reg_1.bitsize / 8;\n+    return guest_reg_2.ppc_offset == guest_reg_1.ppc_offset + byte_size;\n+  };\n+\n   for (size_t i = 0; i < m_guest_registers.size(); ++i)\n   {\n     if (regs[i])', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113683825'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5326'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113683825'}}, 'position': 110, 'original_commit_id': '87f7f716191aa5bba0c9d6c193375d0e3127582b', 'path': 'Source/Core/Core/PowerPC/JitArm64/JitArm64_RegCache.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113683825', 'id': 113683825, 'created_at': '2017-04-27T12:35:59Z', 'body': 'Good catch. Will have to update to use BitSet64 since we have more that 32 guest registers now.'}], 'pr_title': '[RFC] JitArm64: Implement CR cache'}
2017-04-27T11:49:20.412596	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326#pullrequestreview-35084374', 'author': 'degasus', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5326, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/degasus/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/2787141?v=3', 'url': 'https://api.github.com/users/degasus', 'followers_url': 'https://api.github.com/users/degasus/followers', 'gists_url': 'https://api.github.com/users/degasus/gists{/gist_id}', 'type': 'User', 'id': 2787141, 'subscriptions_url': 'https://api.github.com/users/degasus/subscriptions', 'received_events_url': 'https://api.github.com/users/degasus/received_events', 'login': 'degasus', 'html_url': 'https://github.com/degasus', 'repos_url': 'https://api.github.com/users/degasus/repos', 'starred_url': 'https://api.github.com/users/degasus/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/degasus/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/degasus/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113676458', 'updated_at': '2017-04-27T11:49:18Z', 'commit_id': 'b8261fb60b41f6176ec630417b31b2c765b23e06', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5326', 'pull_request_review_id': 35084374, 'original_position': 235, 'diff_hunk': '@@ -653,29 +662,30 @@ void JitArm64::mtcrf(UGeckoInstruction inst)\n   if (crm != 0)\n   {\n     ARM64Reg RS = gpr.R(inst.RS);\n-    ARM64Reg WA = gpr.GetReg();\n-    ARM64Reg XA = EncodeRegTo64(WA);\n     ARM64Reg WB = gpr.GetReg();\n     ARM64Reg XB = EncodeRegTo64(WB);\n     MOVP2R(XB, m_crTable.data());\n     for (int i = 0; i < 8; ++i)\n     {\n+      gpr.BindCRToRegister(i, false);', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113676458'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5326'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113676458'}}, 'position': 235, 'original_commit_id': 'b8261fb60b41f6176ec630417b31b2c765b23e06', 'path': 'Source/Core/Core/PowerPC/JitArm64/JitArm64_SystemRegisters.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113676458', 'id': 113676458, 'created_at': '2017-04-27T11:49:18Z', 'body': 'CR is only written if (crm & (0x80 >> i)) != 0'}], 'pr_title': '[RFC] JitArm64: Implement CR cache'}
2017-04-27T11:45:51.969391	{'source': 'ghhookparser', 'url': 'https://github.com/dolphin-emu/dolphin/pull/5326#pullrequestreview-35083858', 'author': 'degasus', 'repo': 'dolphin-emu/dolphin', 'type': 'gh_pull_request_review', 'action': 'submitted', 'pr_id': 5326, 'state': 'commented', 'comments': [{'user': {'site_admin': False, 'organizations_url': 'https://api.github.com/users/degasus/orgs', 'avatar_url': 'https://avatars3.githubusercontent.com/u/2787141?v=3', 'url': 'https://api.github.com/users/degasus', 'followers_url': 'https://api.github.com/users/degasus/followers', 'gists_url': 'https://api.github.com/users/degasus/gists{/gist_id}', 'type': 'User', 'id': 2787141, 'subscriptions_url': 'https://api.github.com/users/degasus/subscriptions', 'received_events_url': 'https://api.github.com/users/degasus/received_events', 'login': 'degasus', 'html_url': 'https://github.com/degasus', 'repos_url': 'https://api.github.com/users/degasus/repos', 'starred_url': 'https://api.github.com/users/degasus/starred{/owner}{/repo}', 'following_url': 'https://api.github.com/users/degasus/following{/other_user}', 'gravatar_id': '', 'events_url': 'https://api.github.com/users/degasus/events{/privacy}'}, 'url': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113675974', 'updated_at': '2017-04-27T11:45:50Z', 'commit_id': 'b8261fb60b41f6176ec630417b31b2c765b23e06', 'pull_request_url': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5326', 'pull_request_review_id': 35083858, 'original_position': 202, 'diff_hunk': '@@ -623,25 +602,55 @@ void JitArm64::crXXX(UGeckoInstruction inst)\n   }\n \n   ORR(XB, XB, 32, 0, true);  // XB | 1<<32\n-  STR(INDEX_UNSIGNED, XB, PPC_REG, PPCSTATE_OFF(cr_val[field]));\n \n   gpr.Unlock(WA);\n-  gpr.Unlock(WB);\n }\n \n void JitArm64::mfcr(UGeckoInstruction inst)\n {\n   INSTRUCTION_START\n   JITDISABLE(bJITSystemRegistersOff);\n \n-  gpr.Lock(W0, W1, W2, W30);\n-  BL(GetAsmRoutines()->mfcr);\n-  gpr.Unlock(W1, W2, W30);\n-\n   gpr.BindToRegister(inst.RD, false);\n-  MOV(gpr.R(inst.RD), W0);\n+  ARM64Reg WA = gpr.R(inst.RD);\n+  ARM64Reg WB = gpr.GetReg();\n+  ARM64Reg WC = gpr.GetReg();\n+  ARM64Reg XA = EncodeRegTo64(WA);\n+  ARM64Reg XB = EncodeRegTo64(WB);\n+  ARM64Reg XC = EncodeRegTo64(WC);\n+\n+  for (int i = 0; i < 8; i++)\n+  {\n+    MOV(XB, gpr.CR(i));\n \n-  gpr.Unlock(W0);\n+    // SO\n+    if (i == 0)\n+    {\n+      UBFX(XA, XB, 61, 1);\n+    }\n+    else\n+    {\n+      ORR(WA, WZR, WA, ArithOption(WA, ST_LSL, 4));\n+      UBFX(XC, XB, 61, 1);\n+      ORR(XA, XA, XC);', '_links': {'html': {'href': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113675974'}, 'pull_request': {'href': 'https://api.github.com/repos/dolphin-emu/dolphin/pulls/5326'}, 'self': {'href': 'https://api.github.com/repos//dolphin-emu/dolphin/pulls/comments/113675974'}}, 'position': 202, 'original_commit_id': 'b8261fb60b41f6176ec630417b31b2c765b23e06', 'path': 'Source/Core/Core/PowerPC/JitArm64/JitArm64_SystemRegisters.cpp', 'html_url': 'https://github.com/dolphin-emu/dolphin/pull/5326#discussion_r113675974', 'id': 113675974, 'created_at': '2017-04-27T11:45:50Z', 'body': 'As the upper bits of WA are zero, this is the same as:\r\nUBFX(XC, XB, 61, 1);\r\nORR(WA, XC, XA, ArithOption(XA, ST_LSL, 4));'}], 'pr_title': '[RFC] JitArm64: Implement CR cache'}

Recent 'gh_push' events

2017-04-27T18:59:25.777525	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '8028564a0767680bef8f917654dba16d3626c869', 'after_sha': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'commits': [{'message': '[Android] Fix game banners\n\nUse Bitmap.setPixels() instead of Bitmap.copyPixelsFromBuffer() the former\nuse non pre-multiplied values of the colors which is what we expect to\ncome from the native code.', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/1e73f3c76eb562d78b8c5bb0a0a9edf602f1dd9f', 'author': {'email': 'mahdi.hijazi@booking.com', 'name': 'Mahdi Hijazi'}, 'added': [], 'distinct': True, 'hash': '1e73f3c76eb562d78b8c5bb0a0a9edf602f1dd9f', 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java']}, {'message': 'Merge pull request #5331 from mahdihijazi/fix_game_banners2\n\n[Android] Fix game banners', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'author': {'email': 'degasus@users.noreply.github.com', 'username': 'degasus', 'name': 'Markus Wick'}, 'added': [], 'distinct': True, 'hash': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'modified': ['Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/GameBannerRequestHandler.java']}], 'pusher': 'degasus', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-27T16:12:36.470111	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'after_sha': '8028564a0767680bef8f917654dba16d3626c869', 'commits': [{'message': "IOS/ES: Drop unnecessary memset for vectors\n\nIOS doesn't do it, and we don't need it anyway, so let's not do it.", 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/65d37ee2dc5c968eaa6b46bf6dd926b2518f5697', 'author': {'email': 'leo@innovatetechnologi.es', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '65d37ee2dc5c968eaa6b46bf6dd926b2518f5697', 'modified': ['Source/Core/Core/IOS/Device.cpp', 'Source/Core/Core/IOS/Device.h', 'Source/Core/Core/IOS/ES/ES.cpp']}, {'message': 'Merge pull request #5329 from leoetlino/clear\n\nIOS/ES: Drop unnecessary memset for vectors', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/8028564a0767680bef8f917654dba16d3626c869', 'author': {'email': 'leolino.lam@gmail.com', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '8028564a0767680bef8f917654dba16d3626c869', 'modified': ['Source/Core/Core/IOS/Device.cpp', 'Source/Core/Core/IOS/Device.h', 'Source/Core/Core/IOS/ES/ES.cpp']}], 'pusher': 'leoetlino', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-26T21:58:55.381708	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': 'aedfb5df32b47aa6e44b1109769674341c42eca1', 'after_sha': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'commits': [{'message': 'Fix emulated Wiimotes', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/6c1c8e03b89b853154b2ba92655679efa0f7bd95', 'author': {'email': 'leo@innovatetechnologi.es', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '6c1c8e03b89b853154b2ba92655679efa0f7bd95', 'modified': ['Source/Core/Core/HW/WiimoteCommon/WiimoteReport.h']}, {'message': 'WiimoteCommon: add static_assert for struct sizes', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/4d42a098c32c7be45f826554b49179f199e65c73', 'author': {'email': 'leo@innovatetechnologi.es', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '4d42a098c32c7be45f826554b49179f199e65c73', 'modified': ['Source/Core/Core/HW/WiimoteCommon/WiimoteReport.h']}, {'message': 'Merge pull request #5328 from leoetlino/wiimote-fix\n\nFix emulated Wiimotes', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/9fc394f9c76e28208d783c262350bc4d9119d96b', 'author': {'email': 'leolino.lam@gmail.com', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '9fc394f9c76e28208d783c262350bc4d9119d96b', 'modified': ['Source/Core/Core/HW/WiimoteCommon/WiimoteReport.h']}], 'pusher': 'leoetlino', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-26T21:02:45.697304	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '341fefd65ab5c098400f656399f4eca80702d4c2', 'after_sha': 'aedfb5df32b47aa6e44b1109769674341c42eca1', 'commits': [{'message': 'JitArm64_SystemRegisters: Fix crXXX (set 32nd bit)', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/8799f6b64fa4f264f744a0e6586f150ec782c7f6', 'author': {'email': 'MerryMage@users.noreply.github.com', 'username': 'MerryMage', 'name': 'MerryMage'}, 'added': [], 'distinct': True, 'hash': '8799f6b64fa4f264f744a0e6586f150ec782c7f6', 'modified': ['Source/Core/Core/PowerPC/JitArm64/JitArm64_SystemRegisters.cpp']}, {'message': 'Merge pull request #5327 from MerryMage/crXXX\n\nJitArm64_SystemRegisters: Fix crXXX (set 32nd bit)', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/aedfb5df32b47aa6e44b1109769674341c42eca1', 'author': {'email': 'degasus@users.noreply.github.com', 'username': 'degasus', 'name': 'Markus Wick'}, 'added': [], 'distinct': True, 'hash': 'aedfb5df32b47aa6e44b1109769674341c42eca1', 'modified': ['Source/Core/Core/PowerPC/JitArm64/JitArm64_SystemRegisters.cpp']}], 'pusher': 'degasus', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-26T19:16:17.443110	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '560c66f9c6d3e08fa2a4202180e1ad4518f58df5', 'after_sha': '341fefd65ab5c098400f656399f4eca80702d4c2', 'commits': [{'message': 'MemoryWindow: Replace Search with FindNext', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/5123dc265168e54b4b0dd04905a158a67f3ff788', 'author': {'email': 'sepalani@hotmail.fr', 'username': 'sepalani', 'name': 'Sepalani'}, 'added': [], 'distinct': True, 'hash': '5123dc265168e54b4b0dd04905a158a67f3ff788', 'modified': ['Source/Core/DolphinWX/Debugger/MemoryWindow.cpp', 'Source/Core/DolphinWX/Debugger/MemoryWindow.h']}, {'message': 'MemoryWindow: FindPrevious button added', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/58e7415fe508fa94d058cfd6552442c7564da184', 'author': {'email': 'sepalani@hotmail.fr', 'username': 'sepalani', 'name': 'Sepalani'}, 'added': [], 'distinct': True, 'hash': '58e7415fe508fa94d058cfd6552442c7564da184', 'modified': ['Source/Core/DolphinWX/Debugger/MemoryWindow.cpp', 'Source/Core/DolphinWX/Debugger/MemoryWindow.h']}, {'message': 'Merge pull request #5289 from sepalani/mem-find\n\nMemoryWindow: Replace Search with Find Next/Previous buttons', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/341fefd65ab5c098400f656399f4eca80702d4c2', 'author': {'email': 'leolino.lam@gmail.com', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '341fefd65ab5c098400f656399f4eca80702d4c2', 'modified': ['Source/Core/DolphinWX/Debugger/MemoryWindow.cpp', 'Source/Core/DolphinWX/Debugger/MemoryWindow.h']}], 'pusher': 'leoetlino', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-26T18:30:53.969107	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '5fa206e529985564b87ea94ba3bd402b503e8d44', 'after_sha': '560c66f9c6d3e08fa2a4202180e1ad4518f58df5', 'commits': [{'message': 'WX: Build fix\n\nGTK2 is a dependency on Linux whenever USE_X11 is true, but we were\nnot linking or adding the include directory for GTK for DolphinWX.\n\nFixes a regression introduced by 6197d9622.', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/fa0c61eb6dab22e308772135e3f9f1809d099aa2', 'author': {'email': 'leo@innovatetechnologi.es', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': 'fa0c61eb6dab22e308772135e3f9f1809d099aa2', 'modified': ['Source/Core/DolphinWX/CMakeLists.txt']}, {'message': 'CMake/WX: specify PRIVATE for target_link_libraries', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/831ae6a9628fac7d4aabc390a4d04684a2685ffc', 'author': {'email': 'leo@innovatetechnologi.es', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '831ae6a9628fac7d4aabc390a4d04684a2685ffc', 'modified': ['Source/Core/DolphinWX/CMakeLists.txt']}, {'message': 'Merge pull request #5324 from leoetlino/build-fix\n\nWX: Build fix', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/560c66f9c6d3e08fa2a4202180e1ad4518f58df5', 'author': {'email': 'leolino.lam@gmail.com', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '560c66f9c6d3e08fa2a4202180e1ad4518f58df5', 'modified': ['Source/Core/DolphinWX/CMakeLists.txt']}], 'pusher': 'leoetlino', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-26T18:25:37.918157	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '33f56a84b23c1107285386eb49441b4de9b60973', 'after_sha': '5fa206e529985564b87ea94ba3bd402b503e8d44', 'commits': [{'message': 'Move shared Wiimote files into WiimoteCommon', 'removed': ['Source/Core/Core/HW/WiimoteEmu/WiimoteHid.h', 'Source/Core/Core/HW/WiimoteReal/WiimoteRealBase.h'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/823dba47f5cae5db4e9772b7dff5524e5019414a', 'author': {'email': 'spycrab@users.noreply.github.com', 'username': 'spycrab', 'name': 'spycrab'}, 'added': ['Source/Core/Core/HW/WiimoteCommon/WiimoteConstants.h', 'Source/Core/Core/HW/WiimoteCommon/WiimoteHid.h', 'Source/Core/Core/HW/WiimoteCommon/WiimoteReport.h'], 'distinct': True, 'hash': '823dba47f5cae5db4e9772b7dff5524e5019414a', 'modified': ['Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp', 'Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp', 'Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h', 'Source/Core/Core/HW/WiimoteReal/IOLinux.cpp', 'Source/Core/Core/HW/WiimoteReal/IOWin.cpp', 'Source/Core/Core/HW/WiimoteReal/IOWin.h', 'Source/Core/Core/HW/WiimoteReal/IOdarwin.mm', 'Source/Core/Core/HW/WiimoteReal/IOhidapi.cpp', 'Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp', 'Source/Core/Core/HW/WiimoteReal/WiimoteReal.h', 'Source/Core/Core/Movie.cpp']}, {'message': 'Merge pull request #5325 from spycrab/wiimote_common\n\nMove shared Wiimote files into WiimoteCommon', 'removed': ['Source/Core/Core/HW/WiimoteEmu/WiimoteHid.h', 'Source/Core/Core/HW/WiimoteReal/WiimoteRealBase.h'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/5fa206e529985564b87ea94ba3bd402b503e8d44', 'author': {'email': 'leolino.lam@gmail.com', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': ['Source/Core/Core/HW/WiimoteCommon/WiimoteConstants.h', 'Source/Core/Core/HW/WiimoteCommon/WiimoteHid.h', 'Source/Core/Core/HW/WiimoteCommon/WiimoteReport.h'], 'distinct': True, 'hash': '5fa206e529985564b87ea94ba3bd402b503e8d44', 'modified': ['Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp', 'Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp', 'Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h', 'Source/Core/Core/HW/WiimoteReal/IOLinux.cpp', 'Source/Core/Core/HW/WiimoteReal/IOWin.cpp', 'Source/Core/Core/HW/WiimoteReal/IOWin.h', 'Source/Core/Core/HW/WiimoteReal/IOdarwin.mm', 'Source/Core/Core/HW/WiimoteReal/IOhidapi.cpp', 'Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp', 'Source/Core/Core/HW/WiimoteReal/WiimoteReal.h', 'Source/Core/Core/Movie.cpp']}], 'pusher': 'leoetlino', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-26T09:24:16.592582	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '255fd14db6034180d0820df3b54c667fa7cb8c28', 'after_sha': '33f56a84b23c1107285386eb49441b4de9b60973', 'commits': [{'message': 'ESFormats: Fix the first field of ticket views\n\nLooking more carefully at the IOS ticket view generation code reveals\nthat the first field in the TicketView struct is copied over from\nthe ticket version, extended to 4 bytes.', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/1b3b7518e6f93d943745d23efd8958608a1cbb71', 'author': {'email': 'leo@innovatetechnologi.es', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '1b3b7518e6f93d943745d23efd8958608a1cbb71', 'modified': ['Source/Core/Core/IOS/ES/Formats.cpp', 'Source/Core/Core/IOS/ES/Formats.h']}, {'message': 'Merge pull request #5319 from leoetlino/ticket-view-version\n\nESFormats: Fix the first field of ticket views', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/33f56a84b23c1107285386eb49441b4de9b60973', 'author': {'email': 'leolino.lam@gmail.com', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '33f56a84b23c1107285386eb49441b4de9b60973', 'modified': ['Source/Core/Core/IOS/ES/Formats.cpp', 'Source/Core/Core/IOS/ES/Formats.h']}], 'pusher': 'leoetlino', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-26T01:21:56.088187	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '4d52df150bfb20f4892d364f00e52944ec3d3473', 'after_sha': '255fd14db6034180d0820df3b54c667fa7cb8c28', 'commits': [{'message': 'CMake: remove artisanal wxWidgets version check', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/f7892faa806878179f507a853b1af49d21a9d723', 'author': {'email': 'michaeljosephmaltese@gmail.com', 'username': 'ligfx', 'name': 'Michael Maltese'}, 'added': [], 'distinct': True, 'hash': 'f7892faa806878179f507a853b1af49d21a9d723', 'modified': ['CMakeLists.txt']}, {'message': 'CMake: modern-ize wxWidgets', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/8e7648f42a8e32a9fff3309a52650e8904a6de97', 'author': {'email': 'michaeljosephmaltese@gmail.com', 'username': 'ligfx', 'name': 'Michael Maltese'}, 'added': [], 'distinct': True, 'hash': '8e7648f42a8e32a9fff3309a52650e8904a6de97', 'modified': ['Externals/wxWidgets3/CMakeLists.txt']}, {'message': 'CMake: move GTK+ check into wxWidgets', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/6197d9622fcfc5525061c8cb8c2e1df91a0121f8', 'author': {'email': 'michaeljosephmaltese@gmail.com', 'username': 'ligfx', 'name': 'Michael Maltese'}, 'added': [], 'distinct': True, 'hash': '6197d9622fcfc5525061c8cb8c2e1df91a0121f8', 'modified': ['CMakeLists.txt', 'Externals/wxWidgets3/CMakeLists.txt']}, {'message': 'CMake: move wxWidgets check_lib code into wxWidgets', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/f4c07233877e42a208c581e40c472f81af8cbb87', 'author': {'email': 'michaeljosephmaltese@gmail.com', 'username': 'ligfx', 'name': 'Michael Maltese'}, 'added': [], 'distinct': True, 'hash': 'f4c07233877e42a208c581e40c472f81af8cbb87', 'modified': ['CMakeLists.txt', 'Externals/wxWidgets3/CMakeLists.txt']}, {'message': "CMake: don't globally include wxWidgets headers", 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/6e1940c404eeea05c9bc1f53b7ac2bc692442dce', 'author': {'email': 'michaeljosephmaltese@gmail.com', 'username': 'ligfx', 'name': 'Michael Maltese'}, 'added': [], 'distinct': True, 'hash': '6e1940c404eeea05c9bc1f53b7ac2bc692442dce', 'modified': ['CMakeLists.txt', 'Externals/wxWidgets3/CMakeLists.txt', 'Source/Core/DolphinWX/CMakeLists.txt']}, {'message': 'CMake: DolphinWX cleanup', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/c214c29b01a52a046837b6856742ba6c472e572a', 'author': {'email': 'michaeljosephmaltese@gmail.com', 'username': 'ligfx', 'name': 'Michael Maltese'}, 'added': [], 'distinct': True, 'hash': 'c214c29b01a52a046837b6856742ba6c472e572a', 'modified': ['Source/Core/DolphinWX/CMakeLists.txt']}, {'message': "CMake: don't make DolphinWX link to dl", 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/bd4ffb680cd5b35e8173f9c369a80cc5857edf36', 'author': {'email': 'michaeljosephmaltese@gmail.com', 'username': 'ligfx', 'name': 'Michael Maltese'}, 'added': [], 'distinct': True, 'hash': 'bd4ffb680cd5b35e8173f9c369a80cc5857edf36', 'modified': ['Source/Core/DolphinWX/CMakeLists.txt']}, {'message': 'CMake: remove DolphinWX $DOLPHIN_EXE abstraction', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/b955805b2b0903e8f24837bb942d67624db0aad3', 'author': {'email': 'michaeljosephmaltese@gmail.com', 'username': 'ligfx', 'name': 'Michael Maltese'}, 'added': [], 'distinct': True, 'hash': 'b955805b2b0903e8f24837bb942d67624db0aad3', 'modified': ['Source/Core/DolphinWX/CMakeLists.txt']}, {'message': 'Merge pull request #5316 from ligfx/cmakewxwidgets\n\nVarious CMake cleanups for DolphinWX', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/255fd14db6034180d0820df3b54c667fa7cb8c28', 'author': {'email': 'mathew1800@gmail.com', 'username': 'lioncash', 'name': 'Mat M'}, 'added': [], 'distinct': True, 'hash': '255fd14db6034180d0820df3b54c667fa7cb8c28', 'modified': ['CMakeLists.txt', 'Externals/wxWidgets3/CMakeLists.txt', 'Source/Core/DolphinWX/CMakeLists.txt']}], 'pusher': 'lioncash', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-25T18:00:31.820221	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '7a615afe17df00dfa93e9e0dbd27bf743ff07068', 'after_sha': '4d52df150bfb20f4892d364f00e52944ec3d3473', 'commits': [{'message': 'IOS: Include the UID and GID in open requests\n\nAccuracy change. Required to implement ES contexts properly.', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/c01fda62558f845409f303fe6090a26d3895cccf', 'author': {'email': 'leo@innovatetechnologi.es', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': 'c01fda62558f845409f303fe6090a26d3895cccf', 'modified': ['Source/Core/Core/IOS/Device.cpp', 'Source/Core/Core/IOS/Device.h']}, {'message': 'IOS/ES: Implement ES_SetUid\n\nThis implements ES_SetUid, which is used by the system menu to change\nits own permissions. This is required for implementing permission\nchecks and proper NAND metadata support in the future.', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/cc40389f88794d07b1f523f3627d6084e943d159', 'author': {'email': 'leo@innovatetechnologi.es', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': 'cc40389f88794d07b1f523f3627d6084e943d159', 'modified': ['Source/Core/Core/IOS/ES/ES.cpp', 'Source/Core/Core/IOS/ES/ES.h', 'Source/Core/Core/State.cpp']}, {'message': 'Merge pull request #5317 from leoetlino/es-setuid\n\nIOS/ES: Implement ES_SetUid', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/4d52df150bfb20f4892d364f00e52944ec3d3473', 'author': {'email': 'leolino.lam@gmail.com', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '4d52df150bfb20f4892d364f00e52944ec3d3473', 'modified': ['Source/Core/Core/IOS/Device.cpp', 'Source/Core/Core/IOS/Device.h', 'Source/Core/Core/IOS/ES/ES.cpp', 'Source/Core/Core/IOS/ES/ES.h', 'Source/Core/Core/State.cpp']}], 'pusher': 'leoetlino', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-25T14:48:35.433704	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '262adbe2bc2def8d68c168256d93f38a0aec8cd7', 'after_sha': '7a615afe17df00dfa93e9e0dbd27bf743ff07068', 'commits': [{'message': "DoStop() shouldn't unpause in debug mode", 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/4a553980693afaee07866165dcf44694faf6a06c', 'author': {'email': 'sepalani@hotmail.fr', 'username': 'sepalani', 'name': 'Sepalani'}, 'added': [], 'distinct': True, 'hash': '4a553980693afaee07866165dcf44694faf6a06c', 'modified': ['Source/Core/DolphinWX/FrameTools.cpp']}, {'message': "Merge pull request #5315 from sepalani/debug-pause\n\nDoStop() shouldn't unpause in debug mode", 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/7a615afe17df00dfa93e9e0dbd27bf743ff07068', 'author': {'email': 'leolino.lam@gmail.com', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '7a615afe17df00dfa93e9e0dbd27bf743ff07068', 'modified': ['Source/Core/DolphinWX/FrameTools.cpp']}], 'pusher': 'leoetlino', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-25T11:31:32.048527	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': 'dd31a403dbcc68388568fece827c3f0887bb4b25', 'after_sha': '262adbe2bc2def8d68c168256d93f38a0aec8cd7', 'commits': [{'message': 'JitArm64: Implement timer SPRs', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/e3d0de7442c669f58c4dc91c693435e1036ac280', 'author': {'email': 'MerryMage@users.noreply.github.com', 'username': 'MerryMage', 'name': 'MerryMage'}, 'added': [], 'distinct': True, 'hash': 'e3d0de7442c669f58c4dc91c693435e1036ac280', 'modified': ['Source/Core/Core/CoreTiming.h', 'Source/Core/Core/PowerPC/JitArm64/JitArm64_SystemRegisters.cpp']}, {'message': 'Merge pull request #5262 from MerryMage/mfspr-arm64\n\nJitArm64: Implement timer SPRs', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/262adbe2bc2def8d68c168256d93f38a0aec8cd7', 'author': {'email': 'degasus@users.noreply.github.com', 'username': 'degasus', 'name': 'Markus Wick'}, 'added': [], 'distinct': True, 'hash': '262adbe2bc2def8d68c168256d93f38a0aec8cd7', 'modified': ['Source/Core/Core/CoreTiming.h', 'Source/Core/Core/PowerPC/JitArm64/JitArm64_SystemRegisters.cpp']}], 'pusher': 'degasus', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-24T21:12:41.421244	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '286e9b74ee6f487f73410d1ad0011df6c74b9990', 'after_sha': 'dd31a403dbcc68388568fece827c3f0887bb4b25', 'commits': [{'message': 'Make title column toggleable (Issue #9952)', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/72e92add8aeed82fba8c0f9b5f55a99773b63932', 'author': {'email': 'spycrab@users.noreply.github.com', 'username': 'spycrab', 'name': 'spycrab'}, 'added': [], 'distinct': True, 'hash': '72e92add8aeed82fba8c0f9b5f55a99773b63932', 'modified': ['Source/Core/Core/ConfigManager.cpp', 'Source/Core/Core/ConfigManager.h', 'Source/Core/DolphinWX/FrameTools.cpp', 'Source/Core/DolphinWX/GameListCtrl.cpp', 'Source/Core/DolphinWX/Globals.h', 'Source/Core/DolphinWX/MainMenuBar.cpp']}, {'message': 'Merge pull request #5285 from spycrab/fr_9952\n\nMake title column toggleable (Issue #9952)', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/dd31a403dbcc68388568fece827c3f0887bb4b25', 'author': {'email': 'leolino.lam@gmail.com', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': 'dd31a403dbcc68388568fece827c3f0887bb4b25', 'modified': ['Source/Core/Core/ConfigManager.cpp', 'Source/Core/Core/ConfigManager.h', 'Source/Core/DolphinWX/FrameTools.cpp', 'Source/Core/DolphinWX/GameListCtrl.cpp', 'Source/Core/DolphinWX/Globals.h', 'Source/Core/DolphinWX/MainMenuBar.cpp']}], 'pusher': 'leoetlino', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-24T20:50:06.875212	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '24d5d89056d8fe39afbd05fe62d9a8e4123d2a54', 'after_sha': '286e9b74ee6f487f73410d1ad0011df6c74b9990', 'commits': [{'message': "IOS: Implement UID/GID changes for the PPC\n\nThis will be required for permission checks in the future.\n\nNote that this is only for the PPC as we do not have actual processes.\nKeeping track of other modules' UIDs/GIDs is virtually useless anyway.\n\nUID/GID changes are implemented in the following functions:\n\n* ES_Launch\n* ES_DIVerify\n\nES_SetUid is not implemented yet because it'd need further changes.", 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/dae950ff90e16d6b618874af2b8b455e58bb95c2', 'author': {'email': 'leo@innovatetechnologi.es', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': 'dae950ff90e16d6b618874af2b8b455e58bb95c2', 'modified': ['Source/Core/Core/IOS/ES/ES.cpp', 'Source/Core/Core/IOS/ES/Formats.cpp', 'Source/Core/Core/IOS/ES/Formats.h', 'Source/Core/Core/IOS/ES/NandUtils.cpp', 'Source/Core/Core/IOS/IPC.cpp', 'Source/Core/Core/IOS/IPC.h', 'Source/Core/Core/State.cpp', 'Source/Core/DiscIO/NANDContentLoader.cpp']}, {'message': 'Merge pull request #5309 from leoetlino/ios-uid-gid\n\nIOS: Implement UID/GID changes for the PPC', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/286e9b74ee6f487f73410d1ad0011df6c74b9990', 'author': {'email': 'leolino.lam@gmail.com', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '286e9b74ee6f487f73410d1ad0011df6c74b9990', 'modified': ['Source/Core/Core/IOS/ES/ES.cpp', 'Source/Core/Core/IOS/ES/Formats.cpp', 'Source/Core/Core/IOS/ES/Formats.h', 'Source/Core/Core/IOS/ES/NandUtils.cpp', 'Source/Core/Core/IOS/IPC.cpp', 'Source/Core/Core/IOS/IPC.h', 'Source/Core/Core/State.cpp', 'Source/Core/DiscIO/NANDContentLoader.cpp']}], 'pusher': 'leoetlino', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-24T00:31:18.632946	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': 'c6bc474c29d5dfd58aba818a5621507efcde6f14', 'after_sha': '24d5d89056d8fe39afbd05fe62d9a8e4123d2a54', 'commits': [{'message': 'WiimoteReal: init and destroy ScannerBackends in same thread\n\nThis fixes an error condition on macOS when HIDAPI calls\nIOHIDManagerCreate and IOHIDManagerClose on different threads. The\nerror behavior is non-deterministic, but can cause EXC_BAD_ACCES and\nkill the program.', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/4c5e283e7519690724d81f851a9dd23f39a95721', 'author': {'email': 'michaeljosephmaltese@gmail.com', 'username': 'ligfx', 'name': 'Michael Maltese'}, 'added': [], 'distinct': True, 'hash': '4c5e283e7519690724d81f851a9dd23f39a95721', 'modified': ['Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp', 'Source/Core/Core/HW/WiimoteReal/WiimoteReal.h']}, {'message': 'Merge pull request #5275 from ligfx/fixhidapithread\n\nWiimoteReal: init and destroy ScannerBackends in same thread', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/24d5d89056d8fe39afbd05fe62d9a8e4123d2a54', 'author': {'email': 'leolino.lam@gmail.com', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '24d5d89056d8fe39afbd05fe62d9a8e4123d2a54', 'modified': ['Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp', 'Source/Core/Core/HW/WiimoteReal/WiimoteReal.h']}], 'pusher': 'leoetlino', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-23T22:40:34.303154	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': 'a8dfb325766b09ad5dddc5636f06e2a9ca2e759e', 'after_sha': 'c6bc474c29d5dfd58aba818a5621507efcde6f14', 'commits': [{'message': "WX: Don't specify a parent frame for the render frame", 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/a41c0d3caa79849abf405ad16abaaa3a73c378e9', 'author': {'email': 'samraskauskas@gmail.com', 'username': 'Starsam80', 'name': 'Starsam80'}, 'added': [], 'distinct': True, 'hash': 'a41c0d3caa79849abf405ad16abaaa3a73c378e9', 'modified': ['Source/Core/DolphinWX/FrameTools.cpp']}, {'message': "Merge pull request #5291 from Starsam80/fix-10221\n\nWX: Don't specify a parent frame for the render frame", 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/c6bc474c29d5dfd58aba818a5621507efcde6f14', 'author': {'email': 'tilkax@gmail.com', 'username': 'Tilka', 'name': 'Tilka'}, 'added': [], 'distinct': True, 'hash': 'c6bc474c29d5dfd58aba818a5621507efcde6f14', 'modified': ['Source/Core/DolphinWX/FrameTools.cpp']}], 'pusher': 'Tilka', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-23T22:37:43.151052	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '8a559f2e580c8528f56328d5fed5c70de809b9a1', 'after_sha': 'a8dfb325766b09ad5dddc5636f06e2a9ca2e759e', 'commits': [{'message': 'DolphinWX: Small rework of the Audio config dialog', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/c9c68a8fd459bc58e1ca35fa21427b5b1117be93', 'author': {'email': 'pascal2j-language@yahoo.com', 'username': 'FRtranslator', 'name': 'FRtranslator'}, 'added': [], 'distinct': True, 'hash': 'c9c68a8fd459bc58e1ca35fa21427b5b1117be93', 'modified': ['Source/Core/DolphinWX/Config/AudioConfigPane.cpp']}, {'message': 'Merge pull request #5304 from FRtranslator/Small_rework_Audio_cfg\n\nDolphinWX: Small rework of the Audio config dialog', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/a8dfb325766b09ad5dddc5636f06e2a9ca2e759e', 'author': {'email': 'tilkax@gmail.com', 'username': 'Tilka', 'name': 'Tilka'}, 'added': [], 'distinct': True, 'hash': 'a8dfb325766b09ad5dddc5636f06e2a9ca2e759e', 'modified': ['Source/Core/DolphinWX/Config/AudioConfigPane.cpp']}], 'pusher': 'Tilka', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-23T16:26:00.364557	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '111d92c03d6c25053f6aea87348b2a514895b697', 'after_sha': '8a559f2e580c8528f56328d5fed5c70de809b9a1', 'commits': [{'message': 'Remove more seemingly unused debug UI strings\n\nSame as 2052bb8 but for buttons.', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/8c2e5689ad26557297c1eeef9d00f60f967fc1ab', 'author': {'email': 'josjuice@gmail.com', 'username': 'JosJuice', 'name': 'JosJuice'}, 'added': [], 'distinct': True, 'hash': '8c2e5689ad26557297c1eeef9d00f60f967fc1ab', 'modified': ['Source/Core/DolphinWX/Debugger/DebuggerPanel.cpp']}, {'message': 'Merge pull request #5307 from JosJuice/more-gfx-debug-strings\n\nRemove more seemingly unused debug UI strings', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/8a559f2e580c8528f56328d5fed5c70de809b9a1', 'author': {'email': 'tilkax@gmail.com', 'username': 'Tilka', 'name': 'Tilka'}, 'added': [], 'distinct': True, 'hash': '8a559f2e580c8528f56328d5fed5c70de809b9a1', 'modified': ['Source/Core/DolphinWX/Debugger/DebuggerPanel.cpp']}], 'pusher': 'Tilka', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-23T16:07:16.566177	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '9090f37347a5b1d835b734a654c9eaf0304e241b', 'after_sha': '111d92c03d6c25053f6aea87348b2a514895b697', 'commits': [{'message': 'DPL2Decoder: Remove unnecessary pointer arguments of DesignFIR', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/d0e75bb438b400b3e24979b1775b8e019fc99bff', 'author': {'email': 'MerryMage@users.noreply.github.com', 'username': 'MerryMage', 'name': 'MerryMage'}, 'added': [], 'distinct': True, 'hash': 'd0e75bb438b400b3e24979b1775b8e019fc99bff', 'modified': ['Source/Core/AudioCommon/DPL2Decoder.cpp']}, {'message': 'DPL2Decoder: Reduce scope of variable in DesignFIR', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/24027c1d4adc230121fea67d201265eca9e109a1', 'author': {'email': 'MerryMage@users.noreply.github.com', 'username': 'MerryMage', 'name': 'MerryMage'}, 'added': [], 'distinct': True, 'hash': '24027c1d4adc230121fea67d201265eca9e109a1', 'modified': ['Source/Core/AudioCommon/DPL2Decoder.cpp']}, {'message': 'DPL2Decoder: Simplify cut-off frequency logic in DesignFIR', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/751351fd20443d855f4d7d50754ec0d1001f6a97', 'author': {'email': 'MerryMage@users.noreply.github.com', 'username': 'MerryMage', 'name': 'MerryMage'}, 'added': [], 'distinct': True, 'hash': '751351fd20443d855f4d7d50754ec0d1001f6a97', 'modified': ['Source/Core/AudioCommon/DPL2Decoder.cpp']}, {'message': 'DPL2Decoder: Make constant variables const in DesignFIR', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/71dc81041865e9849ac491ab577a01b5bc82f3d4', 'author': {'email': 'MerryMage@users.noreply.github.com', 'username': 'MerryMage', 'name': 'MerryMage'}, 'added': [], 'distinct': True, 'hash': '71dc81041865e9849ac491ab577a01b5bc82f3d4', 'modified': ['Source/Core/AudioCommon/DPL2Decoder.cpp']}, {'message': 'DPL2Decoder: Prefer std::vector to calloc-ed array', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/42a1f7939d00e38e8a9c29f593b792d06126f41e', 'author': {'email': 'MerryMage@users.noreply.github.com', 'username': 'MerryMage', 'name': 'MerryMage'}, 'added': [], 'distinct': True, 'hash': '42a1f7939d00e38e8a9c29f593b792d06126f41e', 'modified': ['Source/Core/AudioCommon/DPL2Decoder.cpp']}, {'message': 'DPL2Decoder: Simplify DotProduct', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/4f884d0b2fd2dbbc11caa45477017885b90f32a9', 'author': {'email': 'MerryMage@users.noreply.github.com', 'username': 'MerryMage', 'name': 'MerryMage'}, 'added': [], 'distinct': True, 'hash': '4f884d0b2fd2dbbc11caa45477017885b90f32a9', 'modified': ['Source/Core/AudioCommon/DPL2Decoder.cpp']}, {'message': 'DPL2Decoder: Prefer static_cast to C-style casts', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/c9f50fd4ed95ae74c790f10c0ac5ffc334d7caec', 'author': {'email': 'MerryMage@users.noreply.github.com', 'username': 'MerryMage', 'name': 'MerryMage'}, 'added': [], 'distinct': True, 'hash': 'c9f50fd4ed95ae74c790f10c0ac5ffc334d7caec', 'modified': ['Source/Core/AudioCommon/DPL2Decoder.cpp']}, {'message': 'Merge pull request #5303 from MerryMage/DPL2Decoder\n\nDPL2Decoder cleanup', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/111d92c03d6c25053f6aea87348b2a514895b697', 'author': {'email': 'tilkax@gmail.com', 'username': 'Tilka', 'name': 'Tilka'}, 'added': [], 'distinct': True, 'hash': '111d92c03d6c25053f6aea87348b2a514895b697', 'modified': ['Source/Core/AudioCommon/DPL2Decoder.cpp']}], 'pusher': 'Tilka', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-22T21:41:03.527070	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '4c711de309c27a20d54662c13bd38f1e913f9204', 'after_sha': '9090f37347a5b1d835b734a654c9eaf0304e241b', 'commits': [{'message': 'Reorder the Tools menu, with more separators', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/a27b653d613724740ab363dd881ab1f029937865', 'author': {'email': 'pascal2j-language@yahoo.com', 'username': 'FRtranslator', 'name': 'FRtranslator'}, 'added': [], 'distinct': True, 'hash': 'a27b653d613724740ab363dd881ab1f029937865', 'modified': ['Source/Core/DolphinWX/MainMenuBar.cpp']}, {'message': 'Merge pull request #5299 from FRtranslator/Tools_menu_reorder\n\nReorder the Tools menu, with more separators', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/9090f37347a5b1d835b734a654c9eaf0304e241b', 'author': {'email': 'mathew1800@gmail.com', 'username': 'lioncash', 'name': 'Mat M'}, 'added': [], 'distinct': True, 'hash': '9090f37347a5b1d835b734a654c9eaf0304e241b', 'modified': ['Source/Core/DolphinWX/MainMenuBar.cpp']}], 'pusher': 'lioncash', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-22T21:37:41.011739	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '8fe0befbc3cf8ebd60a871c496329f9e12e2829f', 'after_sha': '4c711de309c27a20d54662c13bd38f1e913f9204', 'commits': [{'message': "Delete WXInputBase\n\nIt's unused (apparently since cf8f049). Deleting it will\nlighten the load for translators.", 'removed': ['Source/Core/DolphinWX/WXInputBase.cpp', 'Source/Core/DolphinWX/WXInputBase.h'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/26b6b78f3af627e1691918714d3a88ceeb839bdd', 'author': {'email': 'josjuice@gmail.com', 'username': 'JosJuice', 'name': 'JosJuice'}, 'added': [], 'distinct': True, 'hash': '26b6b78f3af627e1691918714d3a88ceeb839bdd', 'modified': ['Source/Core/DolphinWX/CMakeLists.txt', 'Source/Core/DolphinWX/DolphinWX.vcxproj', 'Source/Core/DolphinWX/DolphinWX.vcxproj.filters', 'Source/Core/DolphinWX/FrameTools.cpp']}, {'message': 'Merge pull request #5301 from JosJuice/delete-wxinputbase\n\nDelete WXInputBase', 'removed': ['Source/Core/DolphinWX/WXInputBase.cpp', 'Source/Core/DolphinWX/WXInputBase.h'], 'url': 'https://github.com/dolphin-emu/dolphin/commit/4c711de309c27a20d54662c13bd38f1e913f9204', 'author': {'email': 'mathew1800@gmail.com', 'username': 'lioncash', 'name': 'Mat M'}, 'added': [], 'distinct': True, 'hash': '4c711de309c27a20d54662c13bd38f1e913f9204', 'modified': ['Source/Core/DolphinWX/CMakeLists.txt', 'Source/Core/DolphinWX/DolphinWX.vcxproj', 'Source/Core/DolphinWX/DolphinWX.vcxproj.filters', 'Source/Core/DolphinWX/FrameTools.cpp']}], 'pusher': 'lioncash', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-22T18:11:29.862381	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '0a1559dc2b9f509e46622831802942fce1e90a99', 'after_sha': '8fe0befbc3cf8ebd60a871c496329f9e12e2829f', 'commits': [{'message': 'Put "Top" on top of "Bottom" in the sensor bar position dropdown', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/e6317eaa3698e2b82784c6245029c4ee2a3b43a9', 'author': {'email': 'josjuice@gmail.com', 'username': 'JosJuice', 'name': 'JosJuice'}, 'added': [], 'distinct': True, 'hash': 'e6317eaa3698e2b82784c6245029c4ee2a3b43a9', 'modified': ['Source/Core/DolphinWX/Config/WiiConfigPane.cpp']}, {'message': 'Merge pull request #5245 from JosJuice/top-on-top\n\nPut "Top" on top of "Bottom" in the sensor bar position dropdown', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/8fe0befbc3cf8ebd60a871c496329f9e12e2829f', 'author': {'email': 'leolino.lam@gmail.com', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': '8fe0befbc3cf8ebd60a871c496329f9e12e2829f', 'modified': ['Source/Core/DolphinWX/Config/WiiConfigPane.cpp']}], 'pusher': 'leoetlino', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-22T09:43:43.268797	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': '0a0a8242141d1bdea4bca8525e23d237418839d7', 'after_sha': '0a1559dc2b9f509e46622831802942fce1e90a99', 'commits': [{'message': 'Jit_Integer: Use constant pool in GenerateOverflow', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/bd4cfaaed7b241a8285a825c735cce21c5724f27', 'author': {'email': 'MerryMage@users.noreply.github.com', 'username': 'MerryMage', 'name': 'MerryMage'}, 'added': [], 'distinct': True, 'hash': 'bd4cfaaed7b241a8285a825c735cce21c5724f27', 'modified': ['Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp']}, {'message': 'Merge pull request #5298 from MerryMage/GenerateOverflow\n\nJit_Integer: Use constant pool in GenerateOverflow', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/0a1559dc2b9f509e46622831802942fce1e90a99', 'author': {'email': 'degasus@users.noreply.github.com', 'username': 'degasus', 'name': 'Markus Wick'}, 'added': [], 'distinct': True, 'hash': '0a1559dc2b9f509e46622831802942fce1e90a99', 'modified': ['Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp']}], 'pusher': 'degasus', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-22T09:06:49.298675	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': 'b5c857d14b6f1ec2d8619604deff2a66fcc5aeec', 'after_sha': '0a0a8242141d1bdea4bca8525e23d237418839d7', 'commits': [{'message': 'Automatic translation resources sync with Transifex', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/0a0a8242141d1bdea4bca8525e23d237418839d7', 'author': {'email': 'josjuice@gmail.com', 'username': 'JosJuice', 'name': 'JosJuice'}, 'added': [], 'distinct': True, 'hash': '0a0a8242141d1bdea4bca8525e23d237418839d7', 'modified': ['Languages/po/ar.po', 'Languages/po/ca.po', 'Languages/po/cs.po', 'Languages/po/da_DK.po', 'Languages/po/de.po', 'Languages/po/dolphin-emu.pot', 'Languages/po/el.po', 'Languages/po/en.po', 'Languages/po/es.po', 'Languages/po/fa.po', 'Languages/po/fr.po', 'Languages/po/hr.po', 'Languages/po/hu.po', 'Languages/po/it.po', 'Languages/po/ja.po', 'Languages/po/ko.po', 'Languages/po/ms_MY.po', 'Languages/po/nb.po', 'Languages/po/nl.po', 'Languages/po/pl.po', 'Languages/po/pt.po', 'Languages/po/pt_BR.po', 'Languages/po/ro_RO.po', 'Languages/po/ru.po', 'Languages/po/sr.po', 'Languages/po/sv.po', 'Languages/po/tr.po', 'Languages/po/zh_CN.po', 'Languages/po/zh_TW.po']}], 'pusher': 'JosJuice', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}
2017-04-21T23:55:25.447903	{'source': 'ghhookparser', 'ref_type': 'heads', 'base_ref_name': None, 'repo': 'dolphin-emu/dolphin', 'deleted': False, 'before_sha': 'bca9a9d4d9f346677698d1eb7884e925d6147946', 'after_sha': 'b5c857d14b6f1ec2d8619604deff2a66fcc5aeec', 'commits': [{'message': 'IOS/ES: Implement GetSharedContents (+ count)\n\nUsed by the system menu when importing a title from SD.\n\nThese are probably the last two ioctlvs used by a major title.', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/b09561ece2b7dcf3e66883b0dba8028a8a77b748', 'author': {'email': 'leo@innovatetechnologi.es', 'username': 'leoetlino', 'name': 'Léo Lam'}, 'added': [], 'distinct': True, 'hash': 'b09561ece2b7dcf3e66883b0dba8028a8a77b748', 'modified': ['Source/Core/Core/IOS/ES/ES.cpp', 'Source/Core/Core/IOS/ES/ES.h', 'Source/Core/Core/IOS/ES/Formats.cpp', 'Source/Core/Core/IOS/ES/Formats.h', 'Source/Core/Core/IOS/ES/NandUtils.cpp', 'Source/Core/Core/IOS/ES/NandUtils.h', 'Source/Core/Core/IOS/ES/TitleInformation.cpp']}, {'message': 'Merge pull request #5210 from leoetlino/es-shared-contents\n\nIOS/ES: Implement GetSharedContents (+ count)', 'removed': [], 'url': 'https://github.com/dolphin-emu/dolphin/commit/b5c857d14b6f1ec2d8619604deff2a66fcc5aeec', 'author': {'email': 'degasus@users.noreply.github.com', 'username': 'degasus', 'name': 'Markus Wick'}, 'added': [], 'distinct': True, 'hash': 'b5c857d14b6f1ec2d8619604deff2a66fcc5aeec', 'modified': ['Source/Core/Core/IOS/ES/ES.cpp', 'Source/Core/Core/IOS/ES/ES.h', 'Source/Core/Core/IOS/ES/Formats.cpp', 'Source/Core/Core/IOS/ES/Formats.h', 'Source/Core/Core/IOS/ES/NandUtils.cpp', 'Source/Core/Core/IOS/ES/NandUtils.h', 'Source/Core/Core/IOS/ES/TitleInformation.cpp']}], 'pusher': 'degasus', 'created': False, 'ref_name': 'master', 'type': 'gh_push', 'forced': False}

Recent 'internal_log' events

2017-04-28T06:10:15.097285	{'source': 'logging', 'level': 'INFO', 'msg': 'New GH %s: %s', 'lineno': 147, 'args': "('dolphin-emu/core-developers', 'Armada651,JosJuice,Parlane,phire,magumagu,Sonicadvance1,Tilka,skidau,hrydgard,degasus,delroth,stenzek,linkmauve,leoetlino,lioncash,shuffle2')", 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:10:14.624342	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:10:14.173772	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:10:14.169757	{'source': 'logging', 'level': 'INFO', 'msg': 'Refreshing list of trusted users (from %s/%s)', 'lineno': 132, 'args': "('dolphin-emu', 'core-developers')", 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:06:39.936126	{'source': 'logging', 'level': 'INFO', 'msg': 'New GH %s: %s', 'lineno': 147, 'args': "('dolphin-emu/trusted-developers', 'moncefmechri,PEmu1,randomstuff,Tinob,spycrab,RisingFog,mathieui,delroth,magcius,galop1n,rukai,Buddybenj,aroulin,clinchergt,Phatcat,glennricster,Sintendo,skidau,comex,aldelaro5,degasus,jezze,spxtr,AdmiralCurtiss,sigmabeta,FioraAeterna,BhaaLseN,absolome,iwubcode,leoetlino,meffij,lioncash,Alcaro,Armada651,JosJuice,phire,Sonicadvance1,vladfi1,Tilka,booto,MerryMage,neobrain,hrydgard,hthh,Linktothepast,mmastrac,SeannyM,adamdmoss,Ryanel,rohit-n,cylgom,shuffle2,hdcmeta,kamiyo,Helios747,ligfx,Ziek,jordan-woyak,endrift,kayru,sepalani,NanoByte011,jloehr,EmptyChaos,magumagu,Parlane,RachelBryk,JMC47,Stevoisiak,mahdihijazi,marcan,Orphis,unknownbrackets,Zopieux,mimimi085181,linkmauve,Aestek,mrgreywater,stenzek,archshift,OrN,bentley,LPFaint99')", 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:06:39.449566	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:06:38.957887	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:06:38.440251	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:06:37.966675	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:06:37.962823	{'source': 'logging', 'level': 'INFO', 'msg': 'Refreshing list of trusted users (from %s/%s)', 'lineno': 132, 'args': "('dolphin-emu', 'trusted-developers')", 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:03:32.828356	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:32.826165	{'source': 'logging', 'level': 'INFO', 'msg': "Watched repo 'dolphin-emu/gcdsp-ida' has our hook installed", 'lineno': 196, 'args': '()', 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:03:32.328631	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:31.842028	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:31.841382	{'source': 'logging', 'level': 'INFO', 'msg': "Watched repo 'dolphin-emu/hwtests' has our hook installed", 'lineno': 196, 'args': '()', 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:03:31.351394	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:30.833907	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:30.833277	{'source': 'logging', 'level': 'INFO', 'msg': "Watched repo 'dolphin-emu/www' has our hook installed", 'lineno': 196, 'args': '()', 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:03:30.339164	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:29.821637	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:29.818603	{'source': 'logging', 'level': 'INFO', 'msg': "Watched repo 'dolphin-emu/sadm' has our hook installed", 'lineno': 196, 'args': '()', 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:03:29.353586	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:28.816007	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}
2017-04-28T06:03:28.813802	{'source': 'logging', 'level': 'INFO', 'msg': "Watched repo 'dolphin-emu/redmine' has our hook installed", 'lineno': 196, 'args': '()', 'pathname': '/home/central/sadm/central/github.py', 'type': 'internal_log'}
2017-04-28T06:03:28.329657	{'source': 'logging', 'level': 'INFO', 'msg': 'Starting new HTTPS connection (1): api.github.com', 'lineno': 657, 'args': '()', 'pathname': '/home/central/venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py', 'type': 'internal_log'}

Recent 'irc_message' events

2017-04-28T03:09:21.751990	{'source': 'ircclient', 'modes': {'v'}, 'who': 'JMC47', 'what': "Lots of things don't work in fifologs", 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T03:09:14.476520	{'source': 'ircclient', 'modes': {'v'}, 'who': 'JMC47', 'what': 'iwubcode: Yup', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T02:47:46.698402	{'source': 'ircclient', 'modes': set(), 'who': 'iwubcode', 'what': "You can't have XFB on when looking at fifologs..", 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T02:47:25.490479	{'source': 'ircclient', 'modes': set(), 'who': 'iwubcode', 'what': 'Ah ok, figured it out', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T02:46:46.531983	{'source': 'ircclient', 'modes': set(), 'who': 'iwubcode', 'what': 'I get "XF load exceeds address space"', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T02:46:39.890051	{'source': 'ircclient', 'modes': set(), 'who': 'iwubcode', 'what': 'Turned on logging', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T02:42:34.911106	{'source': 'ircclient', 'modes': set(), 'who': 'iwubcode', 'what': "Wasn't sure if this should go in #dolphin-emu or not but I can't seem to load fifologs anymore on post 5.0 versions of Dolphin.  4.0 and below work.  They used to work before.  Any ideas?", 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T02:25:31.184495	{'source': 'ircclient', 'modes': {'o'}, 'who': 'HdkR', 'what': "merry: 16m46s on master. Looks like the CR cache doesn't do all that much on povray. Might need to get CR->branch merging to get the full benefit", 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T02:03:04.144761	{'source': 'ircclient', 'modes': {'o'}, 'who': 'HdkR', 'what': "I don't remember what it was at before :P", 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T02:02:20.694652	{'source': 'ircclient', 'modes': {'o'}, 'who': 'HdkR', 'what': 'merry: CR cache PR got me 16m49s on Cortex-A57', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:54:00.795529	{'source': 'ircclient', 'modes': {'o'}, 'who': 'HdkR', 'what': '"<@HdkR> Denver: 15m:55s"', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:53:59.555135	{'source': 'ircclient', 'modes': {'o'}, 'who': 'HdkR', 'what': 'and then', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:53:56.551586	{'source': 'ircclient', 'modes': {'o'}, 'who': 'HdkR', 'what': 'merry: degasus: Pulled up some old numbers back when I was optimizing povray hard. "<@HdkR> 16m:25s for the A57, let\'s see what the Nexus 9 gets"', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:48:48.430998	{'source': 'ircclient', 'modes': set(), 'who': 'Sepalani', 'what': "It helps, for sure. Especially, if you're working in these fields. If not, you might learn them on the fly when needed.", 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:47:59.639128	{'source': 'ircclient', 'modes': set(), 'who': 'Sepalani', 'what': "You don't need to be good in maths or physics to be a good programmer.", 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:42:53.943369	{'source': 'ircclient', 'modes': set(), 'who': 'ZexaronS', 'what': "I don't know about mathematics and physics and the calculations to do something out of scratch , but I know syntax well.", 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:40:44.172522	{'source': 'ircclient', 'modes': set(), 'who': 'Sepalani', 'what': "I thought I wasn't a real programmer when I started GML (Game Maker Language) XvD.", 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:40:13.995017	{'source': 'ircclient', 'modes': set(), 'who': 'Sepalani', 'what': '"Not a real programmer" and you\'re doing C++.', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:40:04.646058	{'source': 'ircclient', 'modes': set(), 'who': 'ZexaronS', 'what': 'I would have to set up VS2015 for this type of work', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:39:54.383570	{'source': 'ircclient', 'modes': set(), 'who': 'Sepalani', 'what': 'No worries ;v).', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:39:38.043752	{'source': 'ircclient', 'modes': set(), 'who': 'ZexaronS', 'what': 'I noticed just a minute ago', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:38:50.860446	{'source': 'ircclient', 'modes': set(), 'who': 'Sepalani', 'what': 'There are indentation issues where your workaround is located.', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:38:16.643187	{'source': 'ircclient', 'modes': set(), 'who': 'Sepalani', 'what': 'ZexaronS, https://github.com/dolphin-emu/dolphin/pull/5323/files/806a69fc732e00e394e41809bb726114146efbca#diff-9ea842e30aae964b2575a2d7e28da753R72', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:37:17.701823	{'source': 'ircclient', 'modes': set(), 'who': 'Sepalani', 'what': 'Welcome, then :vP', 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}
2017-04-28T01:36:36.621194	{'source': 'ircclient', 'modes': set(), 'who': 'ZexaronS', 'what': "That's all I know so far, (yes literally all, new to git, new to github, new to opensource projects, new to C++)", 'direct': False, 'where': '#dolphin-dev', 'type': 'irc_message'}

Recent 'issue' events

2017-04-27T15:55:06.869641	{'source': 'redmine', 'new': False, 'author': 'JosJuice', 'title': 'WX GUI: "Emulation -> Menu -> Dummy string"', 'update': 3, 'type': 'issue', 'issue': 10246}
2017-04-27T15:52:13.322348	{'source': 'redmine', 'new': False, 'author': 'lmello', 'title': 'WX GUI: "Emulation -> Menu -> Dummy string"', 'update': 2, 'type': 'issue', 'issue': 10246}
2017-04-27T14:45:46.858631	{'source': 'redmine', 'new': False, 'author': 'JosJuice', 'title': 'WX GUI: "Emulation -> Menu -> Dummy string"', 'update': 1, 'type': 'issue', 'issue': 10246}
2017-04-27T13:10:59.874273	{'source': 'redmine', 'new': True, 'author': 'lmello', 'title': 'WX GUI: "Emulation -> Menu -> Dummy string"', 'update': 0, 'type': 'issue', 'issue': 10246}
2017-04-27T13:05:47.997901	{'source': 'redmine', 'new': True, 'author': 'lmello', 'title': 'RE4 Vulkan crash - StreamError.cpp', 'update': 0, 'type': 'issue', 'issue': 10245}
2017-04-27T00:24:49.197923	{'source': 'redmine', 'new': False, 'author': 'jvit', 'title': "Zelda Collector's Edition: Ocarina crashes", 'update': 1, 'type': 'issue', 'issue': 10243}
2017-04-27T00:17:13.454556	{'source': 'redmine', 'new': True, 'author': 'leoetlino', 'title': "ES_DeleteTicket's implementation is completely wrong", 'update': 0, 'type': 'issue', 'issue': 10244}
2017-04-27T00:04:04.069576	{'source': 'redmine', 'new': True, 'author': 'jvit', 'title': "Zelda Collector's Edition: Ocarina crashes", 'update': 0, 'type': 'issue', 'issue': 10243}
2017-04-26T20:06:20.557544	{'source': 'redmine', 'new': True, 'author': 'DjBlades', 'title': '[Feature Request] Extend relative input functionality to rotation/push-pull movements', 'update': 0, 'type': 'issue', 'issue': 10242}
2017-04-26T19:44:05.496138	{'source': 'redmine', 'new': True, 'author': 'carrotfear666', 'title': '[feature request] Make the Fifo player minimize seperatly. ', 'update': 0, 'type': 'issue', 'issue': 10241}
2017-04-26T13:01:11.039560	{'source': 'redmine', 'new': False, 'author': 'JosJuice', 'title': 'Metroid Prime Trilogy - Scan visor "inaccuracy" problem', 'update': 1, 'type': 'issue', 'issue': 10239}
2017-04-26T04:38:14.415468	{'source': 'redmine', 'new': False, 'author': 'JMC4789', 'title': 'Star Wars: The Clone Wars can still crash between missions', 'update': 1, 'type': 'issue', 'issue': 10240}
2017-04-26T04:37:41.909338	{'source': 'redmine', 'new': True, 'author': 'JMC4789', 'title': 'Star Wars: The Clone Wars can still crash between missions', 'update': 0, 'type': 'issue', 'issue': 10240}
2017-04-26T02:10:44.336360	{'source': 'redmine', 'new': False, 'author': 'lmello', 'title': 'Black Stripes on water - RE4', 'update': 17, 'type': 'issue', 'issue': 9936}
2017-04-26T00:54:48.257881	{'source': 'redmine', 'new': True, 'author': 'ArchangelRobo', 'title': 'Metroid Prime Trilogy - Scan visor "inaccuracy" problem', 'update': 0, 'type': 'issue', 'issue': 10239}
2017-04-25T21:59:37.426850	{'source': 'redmine', 'new': True, 'author': 'lmello', 'title': 'Strange glitch on Metroid Prime: Trilogy', 'update': 0, 'type': 'issue', 'issue': 10238}
2017-04-25T21:46:25.637811	{'source': 'redmine', 'new': True, 'author': 'lmello', 'title': 'Vulkan + fullscreen + vsync = system freeze', 'update': 0, 'type': 'issue', 'issue': 10237}
2017-04-25T21:34:58.458621	{'source': 'redmine', 'new': True, 'author': 'lmello', 'title': 'Mesa 17 + AMD/Gallium = segmentation fault', 'update': 0, 'type': 'issue', 'issue': 10236}
2017-04-25T20:05:47.124770	{'source': 'redmine', 'new': False, 'author': 'JosJuice', 'title': 'Dolphin freezes when booting Newer Super Mario Bros. Wii', 'update': 6, 'type': 'issue', 'issue': 10230}
2017-04-25T20:03:39.164968	{'source': 'redmine', 'new': False, 'author': 'spycrab0', 'title': 'Dolphin freezes when booting Newer Super Mario Bros. Wii', 'update': 5, 'type': 'issue', 'issue': 10230}
2017-04-25T18:27:23.906423	{'source': 'redmine', 'new': False, 'author': 'JosJuice', 'title': 'Metroid Prime 2 (Trilogy): Scans are attached to the wrong location', 'update': 6, 'type': 'issue', 'issue': 10235}
2017-04-25T14:48:14.156832	{'source': 'redmine', 'new': False, 'author': 'Fog', 'title': 'Generate a core OpenGL context with EGL', 'update': 2, 'type': 'issue', 'issue': 9282}
2017-04-25T06:01:47.930586	{'source': 'redmine', 'new': False, 'author': 'JosJuice', 'title': 'Metroid Prime 2 (Trilogy): Scans are attached to the wrong location', 'update': 5, 'type': 'issue', 'issue': 10235}
2017-04-25T05:59:45.798312	{'source': 'redmine', 'new': False, 'author': 'JosJuice', 'title': '[GUI] Title column in game list should be toggleable', 'update': 4, 'type': 'issue', 'issue': 9952}
2017-04-25T02:14:06.439615	{'source': 'redmine', 'new': False, 'author': 'Hunterakagman', 'title': 'Scans are attached to the wrong location.', 'update': 4, 'type': 'issue', 'issue': 10235}

Recent 'raw_bb_hook' events

2017-04-27T20:49:19.114988	{'source': 'webserver', 'bb_type': 'finished', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493326049, 'url': 'https://buildbot.dolphin-emu.org/#builders/7/builds/1061', 'buildid': 12542, 'masterid': 1, 'buildrequestid': 20668, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-win-dbg-x64', 'builderid': 7}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20668, 'claimed': True, 'builderid': 7, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493326064}, 'number': 1061, 'complete_at': 1493326159, 'state_string': 'finished', 'workerid': 4, 'builderid': 7, 'complete': True, 'results': 0, 'properties': {'branchname': ['pr-5332', 'try build'], 'scheduler': ['pr', 'Scheduler'], 'branch': [None, 'Build'], 'got_revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'GitNoBranch'], 'buildnumber': [1061, 'Build'], 'workername': ['windows', 'Worker'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'builddir': ['C:\\buildbot\\pr-win-dbg-x64', 'worker'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'slavename': ['windows', 'Worker (deprecated)'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build'], 'pr_id': [5332, 'try build'], 'buildername': ['pr-win-dbg-x64', 'Builder'], 'project': ['', 'Build'], 'codebase': ['', 'Build'], 'repository': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'build_url': ['http://dl.dolphin-emu.org/prs/pr-5332-dolphin-latest-dbg-x64.7z', 'SetProperty']}}}
2017-04-27T20:47:28.832277	{'source': 'webserver', 'bb_type': 'starting', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493326049, 'url': 'https://buildbot.dolphin-emu.org/#builders/7/builds/1061', 'buildid': 12542, 'masterid': 1, 'buildrequestid': 20668, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-win-dbg-x64', 'builderid': 7}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20668, 'claimed': True, 'builderid': 7, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493326048}, 'number': 1061, 'complete_at': None, 'state_string': 'starting', 'workerid': 4, 'builderid': 7, 'complete': False, 'results': None, 'properties': {'scheduler': ['pr', 'Scheduler'], 'repository': ['', 'Build'], 'buildnumber': [1061, 'Build'], 'buildername': ['pr-win-dbg-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'branch': [None, 'Build'], 'pr_id': [5332, 'try build'], 'branchname': ['pr-5332', 'try build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build']}}}
2017-04-27T20:47:28.640451	{'source': 'webserver', 'bb_type': 'finished', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325945, 'url': 'https://buildbot.dolphin-emu.org/#builders/20/builds/1062', 'buildid': 12537, 'masterid': 1, 'buildrequestid': 20670, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-win-x64', 'builderid': 20}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20670, 'claimed': True, 'builderid': 20, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325945}, 'number': 1062, 'complete_at': 1493326049, 'state_string': 'finished', 'workerid': 4, 'builderid': 20, 'complete': True, 'results': 0, 'properties': {'branchname': ['pr-5332', 'try build'], 'scheduler': ['pr', 'Scheduler'], 'branch': [None, 'Build'], 'got_revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'GitNoBranch'], 'buildnumber': [1062, 'Build'], 'workername': ['windows', 'Worker'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'builddir': ['C:\\buildbot\\pr-win-x64', 'worker'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'slavename': ['windows', 'Worker (deprecated)'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build'], 'pr_id': [5332, 'try build'], 'buildername': ['pr-win-x64', 'Builder'], 'project': ['', 'Build'], 'codebase': ['', 'Build'], 'repository': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'build_url': ['http://dl.dolphin-emu.org/prs/pr-5332-dolphin-latest-x64.7z', 'SetProperty']}}}
2017-04-27T20:47:03.774958	{'source': 'webserver', 'bb_type': 'finished', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325985, 'url': 'https://buildbot.dolphin-emu.org/#builders/21/builds/1062', 'buildid': 12540, 'masterid': 1, 'buildrequestid': 20671, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-deb-dbg-x64', 'builderid': 21}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20671, 'claimed': True, 'builderid': 21, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325985}, 'number': 1062, 'complete_at': 1493326024, 'state_string': 'finished', 'workerid': 12, 'builderid': 21, 'complete': True, 'results': 0, 'properties': {'branchname': ['pr-5332', 'try build'], 'scheduler': ['pr', 'Scheduler'], 'got_revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'GitNoBranch'], 'buildnumber': [1062, 'Build'], 'branch': [None, 'Build'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'builddir': ['/home/delroth/buildslave/pr-deb-dbg-x64', 'worker'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'workername': ['debian', 'Worker'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build'], 'pr_id': [5332, 'try build'], 'slavename': ['debian', 'Worker (deprecated)'], 'project': ['', 'Build'], 'codebase': ['', 'Build'], 'repository': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'buildername': ['pr-deb-dbg-x64', 'Builder']}}}
2017-04-27T20:46:31.274943	{'source': 'webserver', 'bb_type': 'finished', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325945, 'url': 'https://buildbot.dolphin-emu.org/#builders/33/builds/1060', 'buildid': 12534, 'masterid': 1, 'buildrequestid': 20673, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-osx-x64', 'builderid': 33}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20673, 'claimed': True, 'builderid': 33, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325944}, 'number': 1060, 'complete_at': 1493325991, 'state_string': 'finished', 'workerid': 1, 'builderid': 33, 'complete': True, 'results': 0, 'properties': {'branchname': ['pr-5332', 'try build'], 'scheduler': ['pr', 'Scheduler'], 'got_revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'GitNoBranch'], 'buildnumber': [1060, 'Build'], 'branch': [None, 'Build'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'builddir': ['/Users/osxguest/buildslave/pr-osx-x64', 'worker'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'workername': ['osx', 'Worker'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build'], 'pr_id': [5332, 'try build'], 'slavename': ['osx', 'Worker (deprecated)'], 'project': ['', 'Build'], 'codebase': ['', 'Build'], 'repository': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'buildername': ['pr-osx-x64', 'Builder']}}}
2017-04-27T20:46:29.427477	{'source': 'webserver', 'bb_type': 'finished', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325988, 'url': 'https://buildbot.dolphin-emu.org/#builders/22/builds/1062', 'buildid': 12541, 'masterid': 1, 'buildrequestid': 20672, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'lint', 'builderid': 22}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20672, 'claimed': True, 'builderid': 22, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325987}, 'number': 1062, 'complete_at': 1493325989, 'state_string': 'finished', 'workerid': 9, 'builderid': 22, 'complete': True, 'results': 0, 'properties': {'branchname': ['pr-5332', 'try build'], 'scheduler': ['pr', 'Scheduler'], 'branch': [None, 'Build'], 'got_revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'GitNoBranch'], 'buildnumber': [1062, 'Build'], 'buildername': ['lint', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'builddir': ['/var/lib/buildbot/slave/lint', 'worker'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'workername': ['ubuntu', 'Worker'], 'pr_id': [5332, 'try build'], 'slavename': ['ubuntu', 'Worker (deprecated)'], 'project': ['', 'Build'], 'codebase': ['', 'Build'], 'repository': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build']}}}
2017-04-27T20:46:27.773238	{'source': 'webserver', 'bb_type': 'starting', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325988, 'url': 'https://buildbot.dolphin-emu.org/#builders/22/builds/1062', 'buildid': 12541, 'masterid': 1, 'buildrequestid': 20672, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'lint', 'builderid': 22}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20672, 'claimed': True, 'builderid': 22, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325987}, 'number': 1062, 'complete_at': None, 'state_string': 'starting', 'workerid': 9, 'builderid': 22, 'complete': False, 'results': None, 'properties': {'scheduler': ['pr', 'Scheduler'], 'repository': ['', 'Build'], 'buildnumber': [1062, 'Build'], 'buildername': ['lint', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'branch': [None, 'Build'], 'pr_id': [5332, 'try build'], 'branchname': ['pr-5332', 'try build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build']}}}
2017-04-27T20:46:27.675107	{'source': 'webserver', 'bb_type': 'finished', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325961, 'url': 'https://buildbot.dolphin-emu.org/#builders/8/builds/1078', 'buildid': 12539, 'masterid': 1, 'buildrequestid': 20669, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-android', 'builderid': 8}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20669, 'claimed': True, 'builderid': 8, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325961}, 'number': 1078, 'complete_at': 1493325988, 'state_string': 'finished', 'workerid': 9, 'builderid': 8, 'complete': True, 'results': 0, 'properties': {'branchname': ['pr-5332', 'try build'], 'scheduler': ['pr', 'Scheduler'], 'branch': [None, 'Build'], 'got_revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'GitNoBranch'], 'buildnumber': [1078, 'Build'], 'buildername': ['pr-android', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'builddir': ['/var/lib/buildbot/slave/pr-android', 'worker'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'workername': ['ubuntu', 'Worker'], 'pr_id': [5332, 'try build'], 'slavename': ['ubuntu', 'Worker (deprecated)'], 'project': ['', 'Build'], 'codebase': ['', 'Build'], 'repository': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build']}}}
2017-04-27T20:46:26.026070	{'source': 'webserver', 'bb_type': 'starting', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325985, 'url': 'https://buildbot.dolphin-emu.org/#builders/21/builds/1062', 'buildid': 12540, 'masterid': 1, 'buildrequestid': 20671, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-deb-dbg-x64', 'builderid': 21}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20671, 'claimed': True, 'builderid': 21, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325985}, 'number': 1062, 'complete_at': None, 'state_string': 'starting', 'workerid': 12, 'builderid': 21, 'complete': False, 'results': None, 'properties': {'scheduler': ['pr', 'Scheduler'], 'repository': ['', 'Build'], 'buildnumber': [1062, 'Build'], 'buildername': ['pr-deb-dbg-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'branch': [None, 'Build'], 'pr_id': [5332, 'try build'], 'branchname': ['pr-5332', 'try build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build']}}}
2017-04-27T20:46:25.161506	{'source': 'webserver', 'bb_type': 'finished', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325945, 'url': 'https://buildbot.dolphin-emu.org/#builders/6/builds/1062', 'buildid': 12535, 'masterid': 1, 'buildrequestid': 20667, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-deb-x64', 'builderid': 6}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20667, 'claimed': True, 'builderid': 6, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325945}, 'number': 1062, 'complete_at': 1493325985, 'state_string': 'finished', 'workerid': 12, 'builderid': 6, 'complete': True, 'results': 0, 'properties': {'branchname': ['pr-5332', 'try build'], 'scheduler': ['pr', 'Scheduler'], 'got_revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'GitNoBranch'], 'buildnumber': [1062, 'Build'], 'branch': [None, 'Build'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'builddir': ['/home/delroth/buildslave/pr-deb-x64', 'worker'], 'warnings-count': [3, 'WarningCountingShellCommand'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'workername': ['debian', 'Worker'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build'], 'pr_id': [5332, 'try build'], 'slavename': ['debian', 'Worker (deprecated)'], 'project': ['', 'Build'], 'codebase': ['', 'Build'], 'repository': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'buildername': ['pr-deb-x64', 'Builder']}}}
2017-04-27T20:46:02.634153	{'source': 'webserver', 'bb_type': 'finished', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325945, 'url': 'https://buildbot.dolphin-emu.org/#builders/34/builds/1062', 'buildid': 12536, 'masterid': 1, 'buildrequestid': 20674, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-freebsd-x64', 'builderid': 34}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20674, 'claimed': True, 'builderid': 34, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325945}, 'number': 1062, 'complete_at': 1493325963, 'state_string': 'finished', 'workerid': 8, 'builderid': 34, 'complete': True, 'results': 0, 'properties': {'branchname': ['pr-5332', 'try build'], 'scheduler': ['pr', 'Scheduler'], 'got_revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'GitNoBranch'], 'buildnumber': [1062, 'Build'], 'branch': [None, 'Build'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'builddir': ['/usr/home/buildbot/freebsd/pr-freebsd-x64', 'worker'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'workername': ['freebsd', 'Worker'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build'], 'pr_id': [5332, 'try build'], 'slavename': ['freebsd', 'Worker (deprecated)'], 'project': ['', 'Build'], 'codebase': ['', 'Build'], 'repository': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'buildername': ['pr-freebsd-x64', 'Builder']}}}
2017-04-27T20:46:01.438596	{'source': 'webserver', 'bb_type': 'starting', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325961, 'url': 'https://buildbot.dolphin-emu.org/#builders/8/builds/1078', 'buildid': 12539, 'masterid': 1, 'buildrequestid': 20669, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-android', 'builderid': 8}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20669, 'claimed': True, 'builderid': 8, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325961}, 'number': 1078, 'complete_at': None, 'state_string': 'starting', 'workerid': 9, 'builderid': 8, 'complete': False, 'results': None, 'properties': {'scheduler': ['pr', 'Scheduler'], 'repository': ['', 'Build'], 'buildnumber': [1078, 'Build'], 'buildername': ['pr-android', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'branch': [None, 'Build'], 'pr_id': [5332, 'try build'], 'branchname': ['pr-5332', 'try build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build']}}}
2017-04-27T20:46:01.117393	{'source': 'webserver', 'bb_type': 'finished', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325945, 'url': 'https://buildbot.dolphin-emu.org/#builders/2/builds/1070', 'buildid': 12538, 'masterid': 1, 'buildrequestid': 20666, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-ubu-x64', 'builderid': 2}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20666, 'claimed': True, 'builderid': 2, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325945}, 'number': 1070, 'complete_at': 1493325961, 'state_string': 'finished', 'workerid': 9, 'builderid': 2, 'complete': True, 'results': 0, 'properties': {'branchname': ['pr-5332', 'try build'], 'scheduler': ['pr', 'Scheduler'], 'got_revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'GitNoBranch'], 'buildnumber': [1070, 'Build'], 'branch': [None, 'Build'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'builddir': ['/var/lib/buildbot/slave/pr-ubu-x64', 'worker'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'workername': ['ubuntu', 'Worker'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build'], 'pr_id': [5332, 'try build'], 'slavename': ['ubuntu', 'Worker (deprecated)'], 'project': ['', 'Build'], 'codebase': ['', 'Build'], 'repository': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'buildername': ['pr-ubu-x64', 'Builder']}}}
2017-04-27T20:45:45.810377	{'source': 'webserver', 'bb_type': 'starting', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325945, 'url': 'https://buildbot.dolphin-emu.org/#builders/2/builds/1070', 'buildid': 12538, 'masterid': 1, 'buildrequestid': 20666, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-ubu-x64', 'builderid': 2}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20666, 'claimed': True, 'builderid': 2, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325945}, 'number': 1070, 'complete_at': None, 'state_string': 'starting', 'workerid': 9, 'builderid': 2, 'complete': False, 'results': None, 'properties': {'scheduler': ['pr', 'Scheduler'], 'repository': ['', 'Build'], 'buildnumber': [1070, 'Build'], 'buildername': ['pr-ubu-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'branch': [None, 'Build'], 'pr_id': [5332, 'try build'], 'branchname': ['pr-5332', 'try build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build']}}}
2017-04-27T20:45:45.687963	{'source': 'webserver', 'bb_type': 'starting', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325945, 'url': 'https://buildbot.dolphin-emu.org/#builders/20/builds/1062', 'buildid': 12537, 'masterid': 1, 'buildrequestid': 20670, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-win-x64', 'builderid': 20}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20670, 'claimed': True, 'builderid': 20, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325945}, 'number': 1062, 'complete_at': None, 'state_string': 'starting', 'workerid': 4, 'builderid': 20, 'complete': False, 'results': None, 'properties': {'scheduler': ['pr', 'Scheduler'], 'repository': ['', 'Build'], 'buildnumber': [1062, 'Build'], 'buildername': ['pr-win-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'branch': [None, 'Build'], 'pr_id': [5332, 'try build'], 'branchname': ['pr-5332', 'try build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build']}}}
2017-04-27T20:45:45.673660	{'source': 'webserver', 'bb_type': 'starting', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325945, 'url': 'https://buildbot.dolphin-emu.org/#builders/34/builds/1062', 'buildid': 12536, 'masterid': 1, 'buildrequestid': 20674, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-freebsd-x64', 'builderid': 34}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20674, 'claimed': True, 'builderid': 34, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325945}, 'number': 1062, 'complete_at': None, 'state_string': 'starting', 'workerid': 8, 'builderid': 34, 'complete': False, 'results': None, 'properties': {'scheduler': ['pr', 'Scheduler'], 'repository': ['', 'Build'], 'buildnumber': [1062, 'Build'], 'buildername': ['pr-freebsd-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'branch': [None, 'Build'], 'pr_id': [5332, 'try build'], 'branchname': ['pr-5332', 'try build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build']}}}
2017-04-27T20:45:45.581243	{'source': 'webserver', 'bb_type': 'starting', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325945, 'url': 'https://buildbot.dolphin-emu.org/#builders/6/builds/1062', 'buildid': 12535, 'masterid': 1, 'buildrequestid': 20667, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-deb-x64', 'builderid': 6}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20667, 'claimed': True, 'builderid': 6, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325945}, 'number': 1062, 'complete_at': None, 'state_string': 'starting', 'workerid': 12, 'builderid': 6, 'complete': False, 'results': None, 'properties': {'scheduler': ['pr', 'Scheduler'], 'repository': ['', 'Build'], 'buildnumber': [1062, 'Build'], 'buildername': ['pr-deb-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'branch': [None, 'Build'], 'pr_id': [5332, 'try build'], 'branchname': ['pr-5332', 'try build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build']}}}
2017-04-27T20:45:45.566543	{'source': 'webserver', 'bb_type': 'starting', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325945, 'url': 'https://buildbot.dolphin-emu.org/#builders/33/builds/1060', 'buildid': 12534, 'masterid': 1, 'buildrequestid': 20673, 'buildset': {'parent_buildid': None, 'external_idstring': '5332-79ef82', 'bsid': 5939, 'submitted_at': 1493325944, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2968, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5332 (79ef8248a2a18b87e695c54eebe23ebbbed02680).', 'body': 'From 79ef8248a2a18b87e695c54eebe23ebbbed02680 Mon Sep 17 00:00:00 2001\nFrom: spycrab <spycrab@users.noreply.github.com>\nDate: Thu, 27 Apr 2017 22:38:21 +0200\nSubject: [PATCH] Remove C-style casts and const abuse in Wiimote* code\n\n---\n Source/Core/Core/HW/Wiimote.cpp                    |  4 +--\n Source/Core/Core/HW/Wiimote.h                      |  4 +--\n .../Core/HW/WiimoteEmu/Attachment/Attachment.cpp   |  8 +++--\n .../Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp   |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp  |  2 +-\n .../Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp |  2 +-\n .../Core/HW/WiimoteEmu/Attachment/Turntable.cpp    |  2 +-\n Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp  | 18 +++++-----\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp      | 42 +++++++++++-----------\n Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h        |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp    |  6 ++--\n Source/Core/Core/HW/WiimoteReal/WiimoteReal.h      |  2 +-\n 13 files changed, 52 insertions(+), 48 deletions(-)\n\ndiff --git a/Source/Core/Core/HW/Wiimote.cpp b/Source/Core/Core/HW/Wiimote.cpp\nindex c1f067f..2af2ac0 100644\n--- a/Source/Core/Core/HW/Wiimote.cpp\n+++ b/Source/Core/Core/HW/Wiimote.cpp\n@@ -103,7 +103,7 @@ void Pause()\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID CONTROL channel.\n-void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n+void ControlChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\n@@ -111,7 +111,7 @@ void ControlChannel(int number, u16 channel_id, const void* data, u32 size)\n }\n \n // An L2CAP packet is passed from the Core to the Wiimote on the HID INTERRUPT channel.\n-void InterruptChannel(int number, u16 channel_id, const void* data, u32 size)\n+void InterruptChannel(int number, u16 channel_id, void* data, u32 size)\n {\n   if (WIIMOTE_SRC_HYBRID & g_wiimote_sources[number])\n     static_cast<WiimoteEmu::Wiimote*>(s_config.GetController(number))\ndiff --git a/Source/Core/Core/HW/Wiimote.h b/Source/Core/Core/HW/Wiimote.h\nindex 5e4cc2b..c6b7d33 100644\n--- a/Source/Core/Core/HW/Wiimote.h\n+++ b/Source/Core/Core/HW/Wiimote.h\n@@ -74,8 +74,8 @@ ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup\n ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);\n ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);\n \n-void ControlChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n-void InterruptChannel(int _number, u16 _channelID, const void* _pData, u32 _Size);\n+void ControlChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n+void InterruptChannel(int _number, u16 _channelID, void* _pData, u32 _Size);\n void Update(int _number, bool _connected);\n }\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\nindex ebc956f..479806f 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Attachment.cpp\n@@ -58,7 +58,7 @@ namespace ControllerEmu\n {\n void Extension::GetState(u8* const data)\n {\n-  ((WiimoteEmu::Attachment*)attachments[active_extension].get())->GetState(data);\n+  static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())->GetState(data);\n }\n \n bool Extension::IsButtonPressed() const\n@@ -69,9 +69,11 @@ bool Extension::IsButtonPressed() const\n   // Wiimotes (can? always?) have their active_extension set to -1, we also have to check the\n   // switch_extension\n   if (active_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[active_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[active_extension].get())\n+        ->IsButtonPressed();\n   if (switch_extension > 0)\n-    return ((WiimoteEmu::Attachment*)attachments[switch_extension].get())->IsButtonPressed();\n+    return static_cast<WiimoteEmu::Attachment*>(attachments[switch_extension].get())\n+        ->IsButtonPressed();\n   return false;\n }\n }  // namespace ControllerEmu\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\nindex 1e6927f..b09f13c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Classic.cpp\n@@ -82,7 +82,7 @@ Classic::Classic(ExtensionReg& reg) : Attachment(_trans("Classic"), reg)\n \n void Classic::GetState(u8* const data)\n {\n-  wm_classic_extension* const ccdata = (wm_classic_extension*)data;\n+  wm_classic_extension* const ccdata = reinterpret_cast<wm_classic_extension* const>(data);\n   ccdata->bt.hex = 0;\n \n   // not using calibration data, o well\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\nindex 9c25382..d56d0a5 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Drums.cpp\n@@ -55,7 +55,7 @@ Drums::Drums(ExtensionReg& reg) : Attachment(_trans("Drums"), reg)\n \n void Drums::GetState(u8* const data)\n {\n-  wm_drums_extension* const ddata = (wm_drums_extension*)data;\n+  wm_drums_extension* const ddata = reinterpret_cast<wm_drums_extension* const>(data);\n   ddata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\nindex e1a2dce..7bd012c 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Guitar.cpp\n@@ -69,7 +69,7 @@ Guitar::Guitar(ExtensionReg& reg) : Attachment(_trans("Guitar"), reg)\n \n void Guitar::GetState(u8* const data)\n {\n-  wm_guitar_extension* const gdata = (wm_guitar_extension*)data;\n+  wm_guitar_extension* const gdata = reinterpret_cast<wm_guitar_extension* const>(data);\n   gdata->bt = 0;\n \n   // calibration data not figured out yet?\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\nindex 98d5e18..be95242 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp\n@@ -55,7 +55,7 @@ Nunchuk::Nunchuk(ExtensionReg& reg) : Attachment(_trans("Nunchuk"), reg)\n \n void Nunchuk::GetState(u8* const data)\n {\n-  wm_nc* const ncdata = (wm_nc*)data;\n+  wm_nc* const ncdata = reinterpret_cast<wm_nc* const>(data);\n   ncdata->bt.hex = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\nindex a09521d..ead0337 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Turntable.cpp\n@@ -61,7 +61,7 @@ Turntable::Turntable(ExtensionReg& reg) : Attachment(_trans("Turntable"), reg)\n \n void Turntable::GetState(u8* const data)\n {\n-  wm_turntable_extension* const ttdata = (wm_turntable_extension*)data;\n+  wm_turntable_extension* const ttdata = reinterpret_cast<wm_turntable_extension*>(data);\n   ttdata->bt = 0;\n \n   // stick\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\nindex 3017f75..b7d8560 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/EmuSubroutines.cpp\n@@ -70,7 +70,7 @@ void Wiimote::ReportMode(const wm_report_mode* const dr)\n    The IR enable/disable and speaker enable/disable and mute/unmute values are\n     bit2: 0 = Disable (0x02), 1 = Enable (0x06)\n */\n-void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n+void Wiimote::HidOutputReport(wm_report* sr, const bool send_ack)\n {\n   DEBUG_LOG(WIIMOTE, "HidOutputReport (page: %i, cid: 0x%02x, wm: 0x%02x)", m_index,\n             m_reporting_channel, sr->wm);\n@@ -92,7 +92,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     break;\n \n   case RT_REPORT_MODE:  // 0x12\n-    ReportMode((wm_report_mode*)sr->data);\n+    ReportMode(reinterpret_cast<wm_report_mode*>(sr->data));\n     break;\n \n   case RT_IR_PIXEL_CLOCK:  // 0x13\n@@ -112,17 +112,17 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n \n   case RT_REQUEST_STATUS:  // 0x15\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      RequestStatus((wm_request_status*)sr->data);\n+      RequestStatus(reinterpret_cast<wm_request_status*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n   case RT_WRITE_DATA:  // 0x16\n-    WriteData((wm_write_data*)sr->data);\n+    WriteData(reinterpret_cast<wm_write_data*>(sr->data));\n     break;\n \n   case RT_READ_DATA:  // 0x17\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index])\n-      ReadData((wm_read_data*)sr->data);\n+      ReadData(reinterpret_cast<wm_read_data*>(sr->data));\n     return;  // sends its own ack\n     break;\n \n@@ -131,7 +131,7 @@ void Wiimote::HidOutputReport(const wm_report* const sr, const bool send_ack)\n     // ERROR_LOG(WIIMOTE, "RT_WRITE_SPEAKER_DATA len:%x %s", spkz->length,\n     //\tArrayToString(spkz->data, spkz->length, 100, false).c_str());\n     if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index] && !m_speaker_mute)\n-      Wiimote::SpeakerData((wm_speaker_data*)sr->data);\n+      Wiimote::SpeakerData(reinterpret_cast<wm_speaker_data*>(sr->data));\n     return;  // no ack\n     break;\n \n@@ -179,7 +179,7 @@ void Wiimote::SendAck(u8 _reportID)\n   data[0] = 0xA1;\n   data[1] = RT_ACK_DATA;\n \n-  wm_acknowledge* const ack = (wm_acknowledge*)(data + 2);\n+  wm_acknowledge* ack = reinterpret_cast<wm_acknowledge*>(data + 2);\n \n   ack->buttons = m_status.buttons;\n   ack->reportID = _reportID;\n@@ -226,7 +226,7 @@ void Wiimote::RequestStatus(const wm_request_status* const rs)\n   data[1] = RT_STATUS_REPORT;\n \n   // status values\n-  *(wm_status_report*)(data + 2) = m_status;\n+  *reinterpret_cast<wm_status_report*>(data + 2) = m_status;\n \n   // hybrid Wiimote stuff\n   if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && (m_extension->switch_extension <= 0))\n@@ -535,7 +535,7 @@ void Wiimote::SendReadDataReply(ReadRequest& _request)\n   data[0] = 0xA1;\n   data[1] = RT_READ_DATA_REPLY;\n \n-  wm_read_data_reply* const reply = (wm_read_data_reply*)(data + 2);\n+  wm_read_data_reply* const reply = reinterpret_cast<wm_read_data_reply*>(data + 2);\n   reply->buttons = m_status.buttons;\n   reply->address = Common::swap16(_request.address);\n \ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\nindex 9794e92..beb0089 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp\n@@ -461,7 +461,7 @@ void Wiimote::GetButtonData(u8* const data)\n     UpdateButtonsStatus();\n   }\n \n-  ((wm_buttons*)data)->hex |= m_status.buttons.hex;\n+  reinterpret_cast<wm_buttons*>(data)->hex |= m_status.buttons.hex;\n }\n \n void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n@@ -479,8 +479,8 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf)\n   EmulateSwing(&m_accel, m_swing, is_sideways, is_upright);\n   EmulateShake(&m_accel, m_shake, m_shake_step);\n \n-  wm_accel& accel = *(wm_accel*)(data + rptf.accel);\n-  wm_buttons& core = *(wm_buttons*)(data + rptf.core);\n+  wm_accel& accel = *reinterpret_cast<wm_accel*>(data + rptf.accel);\n+  wm_buttons& core = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n \n   // We now use 2 bits more precision, so multiply by 4 before converting to int\n   s16 x = (s16)(4 * (m_accel.x * ACCEL_RANGE + ACCEL_ZERO_G));\n@@ -610,7 +610,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 1:\n     {\n       memset(data, 0xFF, 10);\n-      wm_ir_basic* const irdata = (wm_ir_basic*)data;\n+      wm_ir_basic* const irdata = reinterpret_cast<wm_ir_basic*>(data);\n       for (unsigned int i = 0; i < 2; ++i)\n       {\n         if (x[i * 2] < 1024 && y[i * 2] < 768)\n@@ -636,7 +636,7 @@ void Wiimote::GetIRData(u8* const data, bool use_accel)\n     case 3:\n     {\n       memset(data, 0xFF, 12);\n-      wm_ir_extended* const irdata = (wm_ir_extended*)data;\n+      wm_ir_extended* const irdata = reinterpret_cast<wm_ir_extended*>(data);\n       for (unsigned int i = 0; i < 4; ++i)\n         if (x[i] < 1024 && y[i] < 768)\n         {\n@@ -700,8 +700,9 @@ void Wiimote::GetExtData(u8* const data)\n       break;\n     }\n \n-    ((wm_motionplus_data*)data)->is_mp_data = 0;\n-    ((wm_motionplus_data*)data)->extension_connected = m_extension->active_extension;\n+    reinterpret_cast<wm_motionplus_data*>(data)->is_mp_data = 0;\n+    reinterpret_cast<wm_motionplus_data*>(data)->extension_connected =\n+        m_extension->active_extension;\n   }\n \n   if (0xAA == m_reg_ext.encryption)\n@@ -734,7 +735,7 @@ void Wiimote::Update()\n       Movie::PlayWiimote(m_index, data, rptf, m_extension->active_extension, m_ext_key))\n   {\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n   else\n   {\n@@ -770,10 +771,10 @@ void Wiimote::Update()\n       std::lock_guard<std::mutex> lk(g_wiimotes_mutex);\n       if (g_wiimotes[m_index])\n       {\n-        const Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n+        Report& rpt = g_wiimotes[m_index]->ProcessReadQueue();\n         if (!rpt.empty())\n         {\n-          const u8* real_data = rpt.data();\n+          u8* real_data = rpt.data();\n           switch (real_data[1])\n           {\n           // use data reports\n@@ -791,8 +792,9 @@ void Wiimote::Update()\n               // mix real-buttons with emu-buttons in the status struct, and in the report\n               if (real_rptf.core && rptf.core)\n               {\n-                m_status.buttons.hex |= ((wm_buttons*)(real_data + real_rptf.core))->hex;\n-                *(wm_buttons*)(data + rptf.core) = m_status.buttons;\n+                m_status.buttons.hex |=\n+                    reinterpret_cast<wm_buttons*>(real_data + real_rptf.core)->hex;\n+                *reinterpret_cast<wm_buttons*>(data + rptf.core) = m_status.buttons;\n               }\n \n               // accel\n@@ -821,7 +823,7 @@ void Wiimote::Update()\n             // if (m_extension->switch_extension)\n             //((wm_status_report*)(real_data + 2))->extension = (m_extension->active_extension > 0);\n             if (m_extension->active_extension)\n-              ((wm_status_report*)(real_data + 2))->extension = 1;\n+              reinterpret_cast<wm_status_report*>(real_data + 2)->extension = 1;\n             rptf_size = -1;\n             break;\n \n@@ -847,7 +849,7 @@ void Wiimote::Update()\n   {\n     NetPlay_GetWiimoteData(m_index, data, rptf.size, m_reporting_mode);\n     if (rptf.core)\n-      m_status.buttons = *(wm_buttons*)(data + rptf.core);\n+      m_status.buttons = *reinterpret_cast<wm_buttons*>(data + rptf.core);\n   }\n \n   Movie::CheckWiimoteStatus(m_index, data, rptf, m_extension->active_extension, m_ext_key);\n@@ -863,7 +865,7 @@ void Wiimote::Update()\n   }\n }\n \n-void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::ControlChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // Check for custom communication\n   if (99 == _channelID)\n@@ -879,7 +881,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   DEBUG_LOG(WIIMOTE, "Emu ControlChannel (page: %i, type: 0x%02x, param: 0x%02x)", m_index,\n             hidp->type, hidp->param);\n@@ -899,7 +901,7 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n     {\n       // AyuanX: My experiment shows Control Channel is never used\n       // shuffle2: but lwbt uses this, so we\'ll do what we must :)\n-      HidOutputReport((wm_report*)hidp->data);\n+      HidOutputReport(reinterpret_cast<wm_report*>(hidp->data));\n \n       u8 handshake = HID_HANDSHAKE_SUCCESS;\n       Core::Callback_WiimoteInterruptChannel(m_index, _channelID, &handshake, 1);\n@@ -916,12 +918,12 @@ void Wiimote::ControlChannel(const u16 _channelID, const void* _pData, u32 _Size\n   }\n }\n \n-void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size)\n+void Wiimote::InterruptChannel(const u16 _channelID, void* _pData, u32 _Size)\n {\n   // this all good?\n   m_reporting_channel = _channelID;\n \n-  const hid_packet* const hidp = (hid_packet*)_pData;\n+  hid_packet* hidp = reinterpret_cast<hid_packet*>(_pData);\n \n   switch (hidp->type)\n   {\n@@ -930,7 +932,7 @@ void Wiimote::InterruptChannel(const u16 _channelID, const void* _pData, u32 _Si\n     {\n     case HID_PARAM_OUTPUT:\n     {\n-      const wm_report* const sr = (wm_report*)hidp->data;\n+      wm_report* sr = reinterpret_cast<wm_report*>(hidp->data);\n \n       if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index])\n       {\ndiff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\nindex 615e939..a493151 100644\n--- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n+++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h\n@@ -198,8 +198,8 @@ class Wiimote : public ControllerEmu::EmulatedController\n   ControllerEmu::ControlGroup* GetTurntableGroup(TurntableGroup group);\n \n   void Update();\n-  void InterruptChannel(const u16 _channelID, const void* _pData, u32 _Size);\n-  void ControlChannel(const u16 _channelID, const void* _pData, u32 _Size);\n+  void InterruptChannel(const u16 _channelID, void* _pData, u32 _Size);\n+  void ControlChannel(const u16 _channelID, void* _pData, u32 _Size);\n   void ConnectOnInput();\n   void Reset();\n \n@@ -212,7 +212,7 @@ class Wiimote : public ControllerEmu::EmulatedController\n \n protected:\n   bool Step();\n-  void HidOutputReport(const wm_report* const sr, const bool send_ack = true);\n+  void HidOutputReport(wm_report* sr, const bool send_ack = true);\n   void HandleExtensionSwap();\n   void UpdateButtonsStatus();\n \ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\nindex 3c0d4a2..d7b22d3 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.cpp\n@@ -142,7 +142,7 @@ void Wiimote::ControlChannel(const u16 channel, const void* const data, const u3\n   else\n   {\n     InterruptChannel(channel, data, size);\n-    const hid_packet* const hidp = (hid_packet*)data;\n+    const hid_packet* const hidp = reinterpret_cast<const hid_packet* const>(data);\n     if (hidp->type == HID_TYPE_SET_REPORT)\n     {\n       u8 handshake_ok = HID_HANDSHAKE_SUCCESS;\n@@ -320,7 +320,7 @@ static bool IsDataReport(const Report& rpt)\n }\n \n // Returns the next report that should be sent\n-const Report& Wiimote::ProcessReadQueue()\n+Report& Wiimote::ProcessReadQueue()\n {\n   // Pop through the queued reports\n   while (m_read_reports.Pop(m_last_input_report))\n@@ -692,7 +692,7 @@ void LoadSettings()\n   for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)\n   {\n     std::string secname("Wiimote");\n-    secname += (char)(\'1\' + i);\n+    secname += static_cast<char>(\'1\' + i);\n     IniFile::Section& sec = *inifile.GetOrCreateSection(secname);\n \n     sec.Get("Source", &g_wiimote_sources[i], i ? WIIMOTE_SRC_NONE : WIIMOTE_SRC_EMU);\ndiff --git a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\nindex 7bb4a23..8bba184 100644\n--- a/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n+++ b/Source/Core/Core/HW/WiimoteReal/WiimoteReal.h\n@@ -38,7 +38,7 @@ class Wiimote : NonCopyable\n   void Update();\n   void ConnectOnInput();\n \n-  const Report& ProcessReadQueue();\n+  Report& ProcessReadQueue();\n \n   void Read();\n   bool Write();\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325945, 'ssid': 3284}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-osx-x64', 'builderid': 33}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325944, 'buildrequestid': 20673, 'claimed': True, 'builderid': 33, 'complete_at': None, 'buildsetid': 5939, 'complete': False, 'results': -1, 'claimed_at': 1493325944}, 'number': 1060, 'complete_at': None, 'state_string': 'starting', 'workerid': 1, 'builderid': 33, 'complete': False, 'results': None, 'properties': {'scheduler': ['pr', 'Scheduler'], 'repository': ['', 'Build'], 'buildnumber': [1060, 'Build'], 'buildername': ['pr-osx-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'branch': [None, 'Build'], 'pr_id': [5332, 'try build'], 'branchname': ['pr-5332', 'try build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'shortrev': ['79ef82', 'try build'], 'headrev': ['79ef8248a2a18b87e695c54eebe23ebbbed02680', 'try build']}}}
2017-04-27T20:41:55.001653	{'source': 'webserver', 'bb_type': 'finished', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325618, 'url': 'https://buildbot.dolphin-emu.org/#builders/7/builds/1060', 'buildid': 12533, 'masterid': 1, 'buildrequestid': 20651, 'buildset': {'parent_buildid': None, 'external_idstring': '5333-4213ea', 'bsid': 5935, 'submitted_at': 1493325414, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2964, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5333 (4213ea1bb4e92bbf3a4824be0833aeb4c3678575).', 'body': 'From 4213ea1bb4e92bbf3a4824be0833aeb4c3678575 Mon Sep 17 00:00:00 2001\nFrom: =?UTF-8?q?L=C3=A9o=20Lam?= <leo@innovatetechnologi.es>\nDate: Thu, 27 Apr 2017 21:22:04 +0200\nSubject: [PATCH] IOS/ES: Handle contexts properly\n\nThis changes the IOS code to handle ES contexts inside of ES, instead\nof leaking out implementation details into the IPC request dispatcher.\n\nThe intent is to clarify what\'s shared between every single ES context,\nand what is specific to an ES context. (Not much.) This should reduce\nthe number of static members in the ES class.\n\nThe other changes are there just because we now keep track of the\nIPC FD inside of ES.\n\nFuture plans:\n\n* After the WAD direct launch hack is dropped, the title context\n  will be made a class member.\n\n* Have proper function prototypes, instead of having every single one\n  of them take ioctlv requests. This will allow reusing IOS code in\n  other parts of the Dolphin codebase without having to construct\n  ioctlv requests.\n---\n Source/Core/Core/IOS/Device.cpp               |   3 +-\n Source/Core/Core/IOS/Device.h                 |   2 +-\n Source/Core/Core/IOS/DeviceStub.cpp           |   6 --\n Source/Core/Core/IOS/DeviceStub.h             |   1 -\n Source/Core/Core/IOS/ES/ES.cpp                | 116 ++++++++++++++---------\n Source/Core/Core/IOS/ES/ES.h                  | 104 ++++++++++++---------\n Source/Core/Core/IOS/ES/Identity.cpp          |   4 +-\n Source/Core/Core/IOS/ES/TitleContents.cpp     |  10 +-\n Source/Core/Core/IOS/ES/TitleManagement.cpp   | 128 +++++++++++++-------------\n Source/Core/Core/IOS/FS/FileIO.cpp            |   3 +-\n Source/Core/Core/IOS/FS/FileIO.h              |   2 +-\n Source/Core/Core/IOS/IPC.cpp                  |  45 ++-------\n Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp       |   4 +-\n Source/Core/Core/IOS/SDIO/SDIOSlot0.h         |   2 +-\n Source/Core/Core/IOS/STM/STM.cpp              |   4 +-\n Source/Core/Core/IOS/STM/STM.h                |   2 +-\n Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp  |   4 +-\n Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h    |   2 +-\n Source/Core/Core/IOS/USB/Bluetooth/BTReal.cpp |   4 +-\n Source/Core/Core/IOS/USB/Bluetooth/BTReal.h   |   2 +-\n Source/Core/Core/IOS/USB/OH0/OH0Device.cpp    |   3 +-\n Source/Core/Core/IOS/USB/OH0/OH0Device.h      |   2 +-\n 22 files changed, 232 insertions(+), 221 deletions(-)\n\ndiff --git a/Source/Core/Core/IOS/Device.cpp b/Source/Core/Core/IOS/Device.cpp\nindex 5d38c7e..e407d54 100644\n--- a/Source/Core/Core/IOS/Device.cpp\n+++ b/Source/Core/Core/IOS/Device.cpp\n@@ -154,9 +154,10 @@ ReturnCode Device::Open(const OpenRequest& request)\n   return IPC_SUCCESS;\n }\n \n-void Device::Close()\n+ReturnCode Device::Close(u32 fd)\n {\n   m_is_active = false;\n+  return IPC_SUCCESS;\n }\n \n IPCCommandResult Device::Unsupported(const Request& request)\ndiff --git a/Source/Core/Core/IOS/Device.h b/Source/Core/Core/IOS/Device.h\nindex 91d2dbb..c8dd0cc 100644\n--- a/Source/Core/Core/IOS/Device.h\n+++ b/Source/Core/Core/IOS/Device.h\n@@ -185,7 +185,7 @@ class Device\n   // Replies to Open and Close requests are sent by the IPC request handler (HandleCommand),\n   // not by the devices themselves.\n   virtual ReturnCode Open(const OpenRequest& request);\n-  virtual void Close();\n+  virtual ReturnCode Close(u32 fd);\n   virtual IPCCommandResult Seek(const SeekRequest& seek) { return Unsupported(seek); }\n   virtual IPCCommandResult Read(const ReadWriteRequest& read) { return Unsupported(read); }\n   virtual IPCCommandResult Write(const ReadWriteRequest& write) { return Unsupported(write); }\ndiff --git a/Source/Core/Core/IOS/DeviceStub.cpp b/Source/Core/Core/IOS/DeviceStub.cpp\nindex cdd74ac..2502c84 100644\n--- a/Source/Core/Core/IOS/DeviceStub.cpp\n+++ b/Source/Core/Core/IOS/DeviceStub.cpp\n@@ -22,12 +22,6 @@ ReturnCode Stub::Open(const OpenRequest& request)\n   return IPC_SUCCESS;\n }\n \n-void Stub::Close()\n-{\n-  WARN_LOG(IOS, "%s faking Close()", m_name.c_str());\n-  m_is_active = false;\n-}\n-\n IPCCommandResult Stub::IOCtl(const IOCtlRequest& request)\n {\n   WARN_LOG(IOS, "%s faking IOCtl()", m_name.c_str());\ndiff --git a/Source/Core/Core/IOS/DeviceStub.h b/Source/Core/Core/IOS/DeviceStub.h\nindex 6b7298c..b6b60b0 100644\n--- a/Source/Core/Core/IOS/DeviceStub.h\n+++ b/Source/Core/Core/IOS/DeviceStub.h\n@@ -22,7 +22,6 @@ class Stub final : public Device\n   Stub(u32 device_id, const std::string& device_name);\n \n   ReturnCode Open(const OpenRequest& request) override;\n-  void Close() override;\n   IPCCommandResult IOCtl(const IOCtlRequest& request) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n };\ndiff --git a/Source/Core/Core/IOS/ES/ES.cpp b/Source/Core/Core/IOS/ES/ES.cpp\nindex 29ea0de..cc9f94d 100644\n--- a/Source/Core/Core/IOS/ES/ES.cpp\n+++ b/Source/Core/Core/IOS/ES/ES.cpp\n@@ -4,6 +4,7 @@\n \n #include "Core/IOS/ES/ES.h"\n \n+#include <algorithm>\n #include <cinttypes>\n #include <cstdio>\n #include <memory>\n@@ -27,17 +28,13 @@ namespace HLE\n {\n namespace Device\n {\n-// Shared across all ES instances.\n+// TODO: drop this and convert the title context into a member once the WAD launch hack is gone.\n static std::string s_content_file;\n static TitleContext s_title_context;\n \n // Title to launch after IOS has been reset and reloaded (similar to /sys/launch.sys).\n static u64 s_title_to_launch;\n \n-ES::ES(u32 device_id, const std::string& device_name) : Device(device_id, device_name)\n-{\n-}\n-\n static void FinishAllStaleImports()\n {\n   const std::vector<u64> titles = IOS::ES::GetTitleImports();\n@@ -58,7 +55,7 @@ static void FinishAllStaleImports()\n   File::CreateDir(import_dir);\n }\n \n-void ES::Init()\n+ES::ES(u32 device_id, const std::string& device_name) : Device(device_id, device_name)\n {\n   FinishAllStaleImports();\n \n@@ -182,14 +179,14 @@ static ReturnCode CheckIsAllowedToSetUID(const u32 caller_uid)\n   return caller_uid == system_menu_uid ? IPC_SUCCESS : ES_EINVAL;\n }\n \n-IPCCommandResult ES::SetUID(const IOCtlVRequest& request)\n+IPCCommandResult ES::SetUID(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0) || request.in_vectors[0].size != 8)\n     return GetDefaultReply(ES_EINVAL);\n \n   const u64 title_id = Memory::Read_U64(request.in_vectors[0].address);\n \n-  const s32 ret = CheckIsAllowedToSetUID(m_caller_uid);\n+  const s32 ret = CheckIsAllowedToSetUID(uid);\n   if (ret < 0)\n   {\n     ERROR_LOG(IOS_ES, "SetUID: Permission check failed with error %d", ret);\n@@ -279,6 +276,24 @@ bool ES::LaunchPPCTitle(u64 title_id, bool skip_reload)\n   return BootstrapPPC(content_loader);\n }\n \n+void ES::Context::DoState(PointerWrap& p)\n+{\n+  p.Do(uid);\n+  p.Do(gid);\n+\n+  title_import.tmd.DoState(p);\n+  p.Do(title_import.content_id);\n+  p.Do(title_import.content_buffer);\n+\n+  p.Do(title_export.valid);\n+  title_export.tmd.DoState(p);\n+  p.Do(title_export.title_key);\n+  p.Do(title_export.contents);\n+\n+  p.Do(active);\n+  p.Do(ipc_fd);\n+}\n+\n void ES::DoState(PointerWrap& p)\n {\n   Device::DoState(p);\n@@ -286,17 +301,8 @@ void ES::DoState(PointerWrap& p)\n   p.Do(m_AccessIdentID);\n   s_title_context.DoState(p);\n \n-  m_addtitle_tmd.DoState(p);\n-  p.Do(m_addtitle_content_id);\n-  p.Do(m_addtitle_content_buffer);\n-\n-  p.Do(m_caller_uid);\n-  p.Do(m_caller_gid);\n-\n-  p.Do(m_export_title_context.valid);\n-  m_export_title_context.tmd.DoState(p);\n-  p.Do(m_export_title_context.title_key);\n-  p.Do(m_export_title_context.contents);\n+  for (auto& context : m_contexts)\n+    context.DoState(p);\n \n   u32 Count = (u32)(m_ContentAccessMap.size());\n   p.Do(Count);\n@@ -322,16 +328,36 @@ void ES::DoState(PointerWrap& p)\n   }\n }\n \n+std::array<ES::Context, 3>::iterator ES::FindActiveContext(u32 fd)\n+{\n+  return std::find_if(m_contexts.begin(), m_contexts.end(),\n+                      [fd](const auto& context) { return context.ipc_fd == fd && context.active; });\n+}\n+\n ReturnCode ES::Open(const OpenRequest& request)\n {\n-  m_caller_uid = request.uid;\n-  m_caller_gid = request.gid;\n+  auto context =\n+      std::find_if(m_contexts.begin(), m_contexts.end(), [](const auto& c) { return !c.active; });\n+  if (context == m_contexts.end())\n+    return ES_FD_EXHAUSTED;\n+\n+  context->active = true;\n+  context->uid = request.uid;\n+  context->gid = request.gid;\n+  context->ipc_fd = request.fd;\n   return Device::Open(request);\n }\n \n-void ES::Close()\n+ReturnCode ES::Close(u32 fd)\n {\n-  // XXX: does IOS really clear the content access map here?\n+  auto context = FindActiveContext(fd);\n+  if (context == m_contexts.end())\n+    return ES_EINVAL;\n+\n+  context->active = false;\n+  context->ipc_fd = -1;\n+\n+  // FIXME: IOS doesn\'t clear the content access map here.\n   m_ContentAccessMap.clear();\n   m_AccessIdentID = 0;\n \n@@ -339,48 +365,52 @@ void ES::Close()\n   m_is_active = false;\n   // clear the NAND content cache to make sure nothing remains open.\n   DiscIO::CNANDContentManager::Access().ClearCache();\n+  return IPC_SUCCESS;\n }\n \n IPCCommandResult ES::IOCtlV(const IOCtlVRequest& request)\n {\n   DEBUG_LOG(IOS_ES, "%s (0x%x)", GetDeviceName().c_str(), request.request);\n+  auto context = FindActiveContext(request.fd);\n+  if (context == m_contexts.end())\n+    return GetDefaultReply(ES_EINVAL);\n \n   switch (request.request)\n   {\n   case IOCTL_ES_ADDTICKET:\n     return AddTicket(request);\n   case IOCTL_ES_ADDTMD:\n-    return AddTMD(request);\n+    return AddTMD(*context, request);\n   case IOCTL_ES_ADDTITLESTART:\n-    return AddTitleStart(request);\n+    return AddTitleStart(*context, request);\n   case IOCTL_ES_ADDCONTENTSTART:\n-    return AddContentStart(request);\n+    return AddContentStart(*context, request);\n   case IOCTL_ES_ADDCONTENTDATA:\n-    return AddContentData(request);\n+    return AddContentData(*context, request);\n   case IOCTL_ES_ADDCONTENTFINISH:\n-    return AddContentFinish(request);\n+    return AddContentFinish(*context, request);\n   case IOCTL_ES_ADDTITLEFINISH:\n-    return AddTitleFinish(request);\n+    return AddTitleFinish(*context, request);\n   case IOCTL_ES_ADDTITLECANCEL:\n-    return AddTitleCancel(request);\n+    return AddTitleCancel(*context, request);\n   case IOCTL_ES_GETDEVICEID:\n     return GetConsoleID(request);\n   case IOCTL_ES_OPENTITLECONTENT:\n-    return OpenTitleContent(request);\n+    return OpenTitleContent(context->uid, request);\n   case IOCTL_ES_OPENCONTENT:\n-    return OpenContent(request);\n+    return OpenContent(context->uid, request);\n   case IOCTL_ES_READCONTENT:\n-    return ReadContent(request);\n+    return ReadContent(context->uid, request);\n   case IOCTL_ES_CLOSECONTENT:\n-    return CloseContent(request);\n+    return CloseContent(context->uid, request);\n   case IOCTL_ES_SEEKCONTENT:\n-    return SeekContent(request);\n+    return SeekContent(context->uid, request);\n   case IOCTL_ES_GETTITLEDIR:\n     return GetTitleDirectory(request);\n   case IOCTL_ES_GETTITLEID:\n     return GetTitleID(request);\n   case IOCTL_ES_SETUID:\n-    return SetUID(request);\n+    return SetUID(context->uid, request);\n   case IOCTL_ES_DIVERIFY:\n     return DIVerify(request);\n \n@@ -441,23 +471,23 @@ IPCCommandResult ES::IOCtlV(const IOCtlVRequest& request)\n   case IOCTL_ES_GETSTOREDTMD:\n     return GetStoredTMD(request);\n   case IOCTL_ES_ENCRYPT:\n-    return Encrypt(request);\n+    return Encrypt(context->uid, request);\n   case IOCTL_ES_DECRYPT:\n-    return Decrypt(request);\n+    return Decrypt(context->uid, request);\n   case IOCTL_ES_LAUNCH:\n     return Launch(request);\n   case IOCTL_ES_LAUNCHBC:\n     return LaunchBC(request);\n   case IOCTL_ES_EXPORTTITLEINIT:\n-    return ExportTitleInit(request);\n+    return ExportTitleInit(*context, request);\n   case IOCTL_ES_EXPORTCONTENTBEGIN:\n-    return ExportContentBegin(request);\n+    return ExportContentBegin(*context, request);\n   case IOCTL_ES_EXPORTCONTENTDATA:\n-    return ExportContentData(request);\n+    return ExportContentData(*context, request);\n   case IOCTL_ES_EXPORTCONTENTEND:\n-    return ExportContentEnd(request);\n+    return ExportContentEnd(*context, request);\n   case IOCTL_ES_EXPORTTITLEDONE:\n-    return ExportTitleDone(request);\n+    return ExportTitleDone(*context, request);\n   case IOCTL_ES_CHECKKOREAREGION:\n     return CheckKoreaRegion(request);\n   case IOCTL_ES_GETDEVICECERT:\ndiff --git a/Source/Core/Core/IOS/ES/ES.h b/Source/Core/Core/IOS/ES/ES.h\nindex e7cb5c6..3c769e4 100644\n--- a/Source/Core/Core/IOS/ES/ES.h\n+++ b/Source/Core/Core/IOS/ES/ES.h\n@@ -45,9 +45,6 @@ class ES final : public Device\n public:\n   ES(u32 device_id, const std::string& device_name);\n \n-  // Called after an IOS reload.\n-  static void Init();\n-\n   static s32 DIVerify(const IOS::ES::TMDReader& tmd, const IOS::ES::TicketReader& ticket);\n   static void LoadWAD(const std::string& _rContentFile);\n   static bool LaunchTitle(u64 title_id, bool skip_reload = false);\n@@ -58,7 +55,7 @@ class ES final : public Device\n   void DoState(PointerWrap& p) override;\n \n   ReturnCode Open(const OpenRequest& request) override;\n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n \n private:\n@@ -155,20 +152,55 @@ class ES final : public Device\n     u8 padding[0x3c];\n   };\n \n+  struct TitleImportContext\n+  {\n+    IOS::ES::TMDReader tmd;\n+    u32 content_id = 0xFFFFFFFF;\n+    std::vector<u8> content_buffer;\n+  };\n+\n+  // TODO: merge this with TitleImportContext. Also reuse the global content table.\n+  struct TitleExportContext\n+  {\n+    struct ExportContent\n+    {\n+      OpenedContent content;\n+      std::array<u8, 16> iv{};\n+    };\n+\n+    bool valid = false;\n+    IOS::ES::TMDReader tmd;\n+    std::vector<u8> title_key;\n+    std::map<u32, ExportContent> contents;\n+  };\n+\n+  struct Context\n+  {\n+    void DoState(PointerWrap& p);\n+\n+    u16 gid = 0;\n+    u32 uid = 0;\n+    TitleImportContext title_import;\n+    TitleExportContext title_export;\n+    bool active = false;\n+    // We use this to associate an IPC fd with an ES context.\n+    u32 ipc_fd = -1;\n+  };\n+\n   // Title management\n   IPCCommandResult AddTicket(const IOCtlVRequest& request);\n-  IPCCommandResult AddTMD(const IOCtlVRequest& request);\n-  IPCCommandResult AddTitleStart(const IOCtlVRequest& request);\n-  IPCCommandResult AddContentStart(const IOCtlVRequest& request);\n-  IPCCommandResult AddContentData(const IOCtlVRequest& request);\n-  IPCCommandResult AddContentFinish(const IOCtlVRequest& request);\n-  IPCCommandResult AddTitleFinish(const IOCtlVRequest& request);\n-  IPCCommandResult AddTitleCancel(const IOCtlVRequest& request);\n-  IPCCommandResult ExportTitleInit(const IOCtlVRequest& request);\n-  IPCCommandResult ExportContentBegin(const IOCtlVRequest& request);\n-  IPCCommandResult ExportContentData(const IOCtlVRequest& request);\n-  IPCCommandResult ExportContentEnd(const IOCtlVRequest& request);\n-  IPCCommandResult ExportTitleDone(const IOCtlVRequest& request);\n+  IPCCommandResult AddTMD(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddTitleStart(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddContentStart(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddContentData(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddContentFinish(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddTitleFinish(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddTitleCancel(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportTitleInit(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportContentBegin(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportContentData(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportContentEnd(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportTitleDone(Context& context, const IOCtlVRequest& request);\n   IPCCommandResult DeleteTitle(const IOCtlVRequest& request);\n   IPCCommandResult DeleteTicket(const IOCtlVRequest& request);\n   IPCCommandResult DeleteTitleContent(const IOCtlVRequest& request);\n@@ -178,11 +210,11 @@ class ES final : public Device\n   IPCCommandResult GetDeviceCertificate(const IOCtlVRequest& request);\n   IPCCommandResult CheckKoreaRegion(const IOCtlVRequest& request);\n   IPCCommandResult Sign(const IOCtlVRequest& request);\n-  IPCCommandResult Encrypt(const IOCtlVRequest& request);\n-  IPCCommandResult Decrypt(const IOCtlVRequest& request);\n+  IPCCommandResult Encrypt(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult Decrypt(u32 uid, const IOCtlVRequest& request);\n \n   // Misc\n-  IPCCommandResult SetUID(const IOCtlVRequest& request);\n+  IPCCommandResult SetUID(u32 uid, const IOCtlVRequest& request);\n   IPCCommandResult GetTitleDirectory(const IOCtlVRequest& request);\n   IPCCommandResult GetTitleID(const IOCtlVRequest& request);\n   IPCCommandResult GetConsumption(const IOCtlVRequest& request);\n@@ -191,11 +223,11 @@ class ES final : public Device\n   IPCCommandResult DIVerify(const IOCtlVRequest& request);\n \n   // Title contents\n-  IPCCommandResult OpenTitleContent(const IOCtlVRequest& request);\n-  IPCCommandResult OpenContent(const IOCtlVRequest& request);\n-  IPCCommandResult ReadContent(const IOCtlVRequest& request);\n-  IPCCommandResult CloseContent(const IOCtlVRequest& request);\n-  IPCCommandResult SeekContent(const IOCtlVRequest& request);\n+  IPCCommandResult OpenTitleContent(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult OpenContent(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult ReadContent(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult CloseContent(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult SeekContent(u32 uid, const IOCtlVRequest& request);\n \n   // Title information\n   IPCCommandResult GetTitleCount(const std::vector<u64>& titles, const IOCtlVRequest& request);\n@@ -228,6 +260,8 @@ class ES final : public Device\n   IPCCommandResult DIGetTMDSize(const IOCtlVRequest& request);\n   IPCCommandResult DIGetTMD(const IOCtlVRequest& request);\n \n+  std::array<Context, 3>::iterator FindActiveContext(u32 fd);\n+\n   static bool LaunchIOS(u64 ios_title_id);\n   static bool LaunchPPCTitle(u64 title_id, bool skip_reload);\n   static TitleContext& GetTitleContext();\n@@ -241,27 +275,7 @@ class ES final : public Device\n \n   u32 m_AccessIdentID = 0;\n \n-  // For title installation (ioctls IOCTL_ES_ADDTITLE*).\n-  IOS::ES::TMDReader m_addtitle_tmd;\n-  u32 m_addtitle_content_id = 0xFFFFFFFF;\n-  std::vector<u8> m_addtitle_content_buffer;\n-\n-  u32 m_caller_uid = 0;\n-  u16 m_caller_gid = 0;\n-\n-  struct TitleExportContext\n-  {\n-    struct ExportContent\n-    {\n-      OpenedContent content;\n-      std::array<u8, 16> iv{};\n-    };\n-\n-    bool valid = false;\n-    IOS::ES::TMDReader tmd;\n-    std::vector<u8> title_key;\n-    std::map<u32, ExportContent> contents;\n-  } m_export_title_context;\n+  std::array<Context, 3> m_contexts;\n };\n }  // namespace Device\n }  // namespace HLE\ndiff --git a/Source/Core/Core/IOS/ES/Identity.cpp b/Source/Core/Core/IOS/ES/Identity.cpp\nindex c4b5722..3ae6ba5 100644\n--- a/Source/Core/Core/IOS/ES/Identity.cpp\n+++ b/Source/Core/Core/IOS/ES/Identity.cpp\n@@ -63,7 +63,7 @@ IPCCommandResult ES::GetConsoleID(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::Encrypt(const IOCtlVRequest& request)\n+IPCCommandResult ES::Encrypt(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(3, 2))\n     return GetDefaultReply(ES_EINVAL);\n@@ -85,7 +85,7 @@ IPCCommandResult ES::Encrypt(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::Decrypt(const IOCtlVRequest& request)\n+IPCCommandResult ES::Decrypt(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(3, 2))\n     return GetDefaultReply(ES_EINVAL);\ndiff --git a/Source/Core/Core/IOS/ES/TitleContents.cpp b/Source/Core/Core/IOS/ES/TitleContents.cpp\nindex d97b74d..6a5fc64 100644\n--- a/Source/Core/Core/IOS/ES/TitleContents.cpp\n+++ b/Source/Core/Core/IOS/ES/TitleContents.cpp\n@@ -48,7 +48,7 @@ u32 ES::OpenTitleContent(u32 CFD, u64 TitleID, u16 Index)\n   return CFD;\n }\n \n-IPCCommandResult ES::OpenTitleContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::OpenTitleContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(3, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -64,7 +64,7 @@ IPCCommandResult ES::OpenTitleContent(const IOCtlVRequest& request)\n   return GetDefaultReply(CFD);\n }\n \n-IPCCommandResult ES::OpenContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::OpenContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -79,7 +79,7 @@ IPCCommandResult ES::OpenContent(const IOCtlVRequest& request)\n   return GetDefaultReply(CFD);\n }\n \n-IPCCommandResult ES::ReadContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::ReadContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 1))\n     return GetDefaultReply(ES_EINVAL);\n@@ -131,7 +131,7 @@ IPCCommandResult ES::ReadContent(const IOCtlVRequest& request)\n   return GetDefaultReply(Size);\n }\n \n-IPCCommandResult ES::CloseContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::CloseContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -160,7 +160,7 @@ IPCCommandResult ES::CloseContent(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::SeekContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::SeekContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(3, 0))\n     return GetDefaultReply(ES_EINVAL);\ndiff --git a/Source/Core/Core/IOS/ES/TitleManagement.cpp b/Source/Core/Core/IOS/ES/TitleManagement.cpp\nindex a01e0f7..8426b15 100644\n--- a/Source/Core/Core/IOS/ES/TitleManagement.cpp\n+++ b/Source/Core/Core/IOS/ES/TitleManagement.cpp\n@@ -66,7 +66,7 @@ IPCCommandResult ES::AddTicket(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddTMD(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddTMD(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -76,18 +76,18 @@ IPCCommandResult ES::AddTMD(const IOCtlVRequest& request)\n \n   // Ioctlv 0x2b writes the TMD to /tmp/title.tmd (for imports) and doesn\'t seem to write it\n   // to either /import or /title. So here we simply have to set the import TMD.\n-  m_addtitle_tmd.SetBytes(std::move(tmd));\n+  context.title_import.tmd.SetBytes(std::move(tmd));\n   // TODO: validate TMDs and return the proper error code (-1027) if the signature type is invalid.\n-  if (!m_addtitle_tmd.IsValid())\n+  if (!context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n-  if (!IOS::ES::InitImport(m_addtitle_tmd.GetTitleId()))\n+  if (!IOS::ES::InitImport(context.title_import.tmd.GetTitleId()))\n     return GetDefaultReply(FS_EIO);\n \n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddTitleStart(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddTitleStart(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(4, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -96,19 +96,20 @@ IPCCommandResult ES::AddTitleStart(const IOCtlVRequest& request)\n   std::vector<u8> tmd(request.in_vectors[0].size);\n   Memory::CopyFromEmu(tmd.data(), request.in_vectors[0].address, request.in_vectors[0].size);\n \n-  m_addtitle_tmd.SetBytes(tmd);\n-  if (!m_addtitle_tmd.IsValid())\n+  context.title_import.tmd.SetBytes(tmd);\n+  if (!context.title_import.tmd.IsValid())\n   {\n     ERROR_LOG(IOS_ES, "Invalid TMD while adding title (size = %zd)", tmd.size());\n     return GetDefaultReply(ES_EINVAL);\n   }\n \n   // Finish a previous import (if it exists).\n-  const IOS::ES::TMDReader previous_tmd = IOS::ES::FindImportTMD(m_addtitle_tmd.GetTitleId());\n+  const IOS::ES::TMDReader previous_tmd =\n+      IOS::ES::FindImportTMD(context.title_import.tmd.GetTitleId());\n   if (previous_tmd.IsValid())\n     FinishImport(previous_tmd);\n \n-  if (!IOS::ES::InitImport(m_addtitle_tmd.GetTitleId()))\n+  if (!IOS::ES::InitImport(context.title_import.tmd.GetTitleId()))\n     return GetDefaultReply(FS_EIO);\n \n   // TODO: check and use the other vectors.\n@@ -116,7 +117,7 @@ IPCCommandResult ES::AddTitleStart(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddContentStart(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddContentStart(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(2, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -124,28 +125,28 @@ IPCCommandResult ES::AddContentStart(const IOCtlVRequest& request)\n   u64 title_id = Memory::Read_U64(request.in_vectors[0].address);\n   u32 content_id = Memory::Read_U32(request.in_vectors[1].address);\n \n-  if (m_addtitle_content_id != 0xFFFFFFFF)\n+  if (context.title_import.content_id != 0xFFFFFFFF)\n   {\n     ERROR_LOG(IOS_ES, "Trying to add content when we haven\'t finished adding "\n                       "another content. Unsupported.");\n     return GetDefaultReply(ES_EINVAL);\n   }\n-  m_addtitle_content_id = content_id;\n+  context.title_import.content_id = content_id;\n \n-  m_addtitle_content_buffer.clear();\n+  context.title_import.content_buffer.clear();\n \n   INFO_LOG(IOS_ES, "IOCTL_ES_ADDCONTENTSTART: title id %016" PRIx64 ", "\n                    "content id %08x",\n-           title_id, m_addtitle_content_id);\n+           title_id, context.title_import.content_id);\n \n-  if (!m_addtitle_tmd.IsValid())\n+  if (!context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n-  if (title_id != m_addtitle_tmd.GetTitleId())\n+  if (title_id != context.title_import.tmd.GetTitleId())\n   {\n     ERROR_LOG(IOS_ES, "IOCTL_ES_ADDCONTENTSTART: title id %016" PRIx64 " != "\n                       "TMD title id %016" PRIx64 ", ignoring",\n-              title_id, m_addtitle_tmd.GetTitleId());\n+              title_id, context.title_import.tmd.GetTitleId());\n   }\n \n   // We\'re supposed to return a "content file descriptor" here, which is\n@@ -156,7 +157,7 @@ IPCCommandResult ES::AddContentStart(const IOCtlVRequest& request)\n   return GetDefaultReply(content_fd);\n }\n \n-IPCCommandResult ES::AddContentData(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddContentData(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(2, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -168,7 +169,8 @@ IPCCommandResult ES::AddContentData(const IOCtlVRequest& request)\n \n   u8* data_start = Memory::GetPointer(request.in_vectors[1].address);\n   u8* data_end = data_start + request.in_vectors[1].size;\n-  m_addtitle_content_buffer.insert(m_addtitle_content_buffer.end(), data_start, data_end);\n+  context.title_import.content_buffer.insert(context.title_import.content_buffer.end(), data_start,\n+                                             data_end);\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n@@ -184,22 +186,22 @@ static std::string GetImportContentPath(u64 title_id, u32 content_id)\n   return Common::GetImportTitlePath(title_id) + StringFromFormat("/content/%08x.app", content_id);\n }\n \n-IPCCommandResult ES::AddContentFinish(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddContentFinish(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0))\n     return GetDefaultReply(ES_EINVAL);\n \n-  if (m_addtitle_content_id == 0xFFFFFFFF)\n+  if (context.title_import.content_id == 0xFFFFFFFF)\n     return GetDefaultReply(ES_EINVAL);\n \n   u32 content_fd = Memory::Read_U32(request.in_vectors[0].address);\n   INFO_LOG(IOS_ES, "IOCTL_ES_ADDCONTENTFINISH: content fd %08x", content_fd);\n \n-  if (!m_addtitle_tmd.IsValid())\n+  if (!context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n   // Try to find the title key from a pre-installed ticket.\n-  IOS::ES::TicketReader ticket = DiscIO::FindSignedTicket(m_addtitle_tmd.GetTitleId());\n+  IOS::ES::TicketReader ticket = DiscIO::FindSignedTicket(context.title_import.tmd.GetTitleId());\n   if (!ticket.IsValid())\n   {\n     return GetDefaultReply(ES_NO_TICKET);\n@@ -211,16 +213,16 @@ IPCCommandResult ES::AddContentFinish(const IOCtlVRequest& request)\n   // The IV for title content decryption is the lower two bytes of the\n   // content index, zero extended.\n   IOS::ES::Content content_info;\n-  if (!m_addtitle_tmd.FindContentById(m_addtitle_content_id, &content_info))\n+  if (!context.title_import.tmd.FindContentById(context.title_import.content_id, &content_info))\n   {\n     return GetDefaultReply(ES_EINVAL);\n   }\n   u8 iv[16] = {0};\n   iv[0] = (content_info.index >> 8) & 0xFF;\n   iv[1] = content_info.index & 0xFF;\n-  std::vector<u8> decrypted_data(m_addtitle_content_buffer.size());\n-  mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, m_addtitle_content_buffer.size(), iv,\n-                        m_addtitle_content_buffer.data(), decrypted_data.data());\n+  std::vector<u8> decrypted_data(context.title_import.content_buffer.size());\n+  mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, context.title_import.content_buffer.size(),\n+                        iv, context.title_import.content_buffer.data(), decrypted_data.data());\n   if (!CheckIfContentHashMatches(decrypted_data, content_info))\n   {\n     ERROR_LOG(IOS_ES, "AddContentFinish: Hash for content %08x doesn\'t match", content_info.id);\n@@ -235,12 +237,13 @@ IPCCommandResult ES::AddContentFinish(const IOCtlVRequest& request)\n   }\n   else\n   {\n-    content_path = GetImportContentPath(m_addtitle_tmd.GetTitleId(), m_addtitle_content_id);\n+    content_path = GetImportContentPath(context.title_import.tmd.GetTitleId(),\n+                                        context.title_import.content_id);\n   }\n   File::CreateFullPath(content_path);\n \n   const std::string temp_path = Common::RootUserPath(Common::FROM_SESSION_ROOT) +\n-                                StringFromFormat("/tmp/%08x.app", m_addtitle_content_id);\n+                                StringFromFormat("/tmp/%08x.app", context.title_import.content_id);\n   File::CreateFullPath(temp_path);\n \n   {\n@@ -258,32 +261,33 @@ IPCCommandResult ES::AddContentFinish(const IOCtlVRequest& request)\n     return GetDefaultReply(ES_EIO);\n   }\n \n-  m_addtitle_content_id = 0xFFFFFFFF;\n+  context.title_import.content_id = 0xFFFFFFFF;\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddTitleFinish(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddTitleFinish(Context& context, const IOCtlVRequest& request)\n {\n-  if (!request.HasNumberOfValidVectors(0, 0) || !m_addtitle_tmd.IsValid())\n+  if (!request.HasNumberOfValidVectors(0, 0) || !context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n-  if (!WriteImportTMD(m_addtitle_tmd))\n+  if (!WriteImportTMD(context.title_import.tmd))\n     return GetDefaultReply(ES_EIO);\n \n-  if (!FinishImport(m_addtitle_tmd))\n+  if (!FinishImport(context.title_import.tmd))\n     return GetDefaultReply(FS_EIO);\n \n   INFO_LOG(IOS_ES, "IOCTL_ES_ADDTITLEFINISH");\n-  m_addtitle_tmd.SetBytes({});\n+  context.title_import.tmd.SetBytes({});\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddTitleCancel(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddTitleCancel(Context& context, const IOCtlVRequest& request)\n {\n-  if (!request.HasNumberOfValidVectors(0, 0) || !m_addtitle_tmd.IsValid())\n+  if (!request.HasNumberOfValidVectors(0, 0) || !context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n-  const IOS::ES::TMDReader original_tmd = IOS::ES::FindInstalledTMD(m_addtitle_tmd.GetTitleId());\n+  const IOS::ES::TMDReader original_tmd =\n+      IOS::ES::FindInstalledTMD(context.title_import.tmd.GetTitleId());\n   if (!original_tmd.IsValid())\n   {\n     // This should never happen unless someone messed with the installed TMD directly.\n@@ -294,7 +298,7 @@ IPCCommandResult ES::AddTitleCancel(const IOCtlVRequest& request)\n   if (!FinishImport(original_tmd))\n     return GetDefaultReply(FS_EIO);\n \n-  m_addtitle_tmd.SetBytes({});\n+  context.title_import.tmd.SetBytes({});\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n@@ -363,40 +367,40 @@ IPCCommandResult ES::DeleteTitleContent(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::ExportTitleInit(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportTitleInit(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 1) || request.in_vectors[0].size != 8)\n     return GetDefaultReply(ES_EINVAL);\n \n   // No concurrent title import/export is allowed.\n-  if (m_export_title_context.valid)\n+  if (context.title_export.valid)\n     return GetDefaultReply(ES_EINVAL);\n \n   const auto tmd = IOS::ES::FindInstalledTMD(Memory::Read_U64(request.in_vectors[0].address));\n   if (!tmd.IsValid())\n     return GetDefaultReply(FS_ENOENT);\n \n-  m_export_title_context.tmd = tmd;\n+  context.title_export.tmd = tmd;\n \n-  const auto ticket = DiscIO::FindSignedTicket(m_export_title_context.tmd.GetTitleId());\n+  const auto ticket = DiscIO::FindSignedTicket(context.title_export.tmd.GetTitleId());\n   if (!ticket.IsValid())\n     return GetDefaultReply(ES_NO_TICKET);\n-  if (ticket.GetTitleId() != m_export_title_context.tmd.GetTitleId())\n+  if (ticket.GetTitleId() != context.title_export.tmd.GetTitleId())\n     return GetDefaultReply(ES_EINVAL);\n \n-  m_export_title_context.title_key = ticket.GetTitleKey();\n+  context.title_export.title_key = ticket.GetTitleKey();\n \n-  const auto& raw_tmd = m_export_title_context.tmd.GetRawTMD();\n+  const auto& raw_tmd = context.title_export.tmd.GetRawTMD();\n   if (request.io_vectors[0].size != raw_tmd.size())\n     return GetDefaultReply(ES_EINVAL);\n \n   Memory::CopyToEmu(request.io_vectors[0].address, raw_tmd.data(), raw_tmd.size());\n \n-  m_export_title_context.valid = true;\n+  context.title_export.valid = true;\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::ExportContentBegin(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportContentBegin(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(2, 0) || request.in_vectors[0].size != 8 ||\n       request.in_vectors[1].size != 4)\n@@ -405,7 +409,7 @@ IPCCommandResult ES::ExportContentBegin(const IOCtlVRequest& request)\n   const u64 title_id = Memory::Read_U64(request.in_vectors[0].address);\n   const u32 content_id = Memory::Read_U32(request.in_vectors[1].address);\n \n-  if (!m_export_title_context.valid || m_export_title_context.tmd.GetTitleId() != title_id)\n+  if (!context.title_export.valid || context.title_export.tmd.GetTitleId() != title_id)\n   {\n     ERROR_LOG(IOS_ES, "Tried to use ExportContentBegin with an invalid title export context.");\n     return GetDefaultReply(ES_EINVAL);\n@@ -426,7 +430,7 @@ IPCCommandResult ES::ExportContentBegin(const IOCtlVRequest& request)\n   content->m_Data->Open();\n \n   u32 cid = 0;\n-  while (m_export_title_context.contents.find(cid) != m_export_title_context.contents.end())\n+  while (context.title_export.contents.find(cid) != context.title_export.contents.end())\n     cid++;\n \n   TitleExportContext::ExportContent content_export;\n@@ -434,12 +438,12 @@ IPCCommandResult ES::ExportContentBegin(const IOCtlVRequest& request)\n   content_export.iv[0] = (content->m_metadata.index >> 8) & 0xFF;\n   content_export.iv[1] = content->m_metadata.index & 0xFF;\n \n-  m_export_title_context.contents.emplace(cid, content_export);\n+  context.title_export.contents.emplace(cid, content_export);\n   // IOS returns a content ID which is passed to further content calls.\n   return GetDefaultReply(cid);\n }\n \n-IPCCommandResult ES::ExportContentData(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportContentData(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 1) || request.in_vectors[0].size != 4 ||\n       request.io_vectors[0].size == 0)\n@@ -450,8 +454,8 @@ IPCCommandResult ES::ExportContentData(const IOCtlVRequest& request)\n   const u32 content_id = Memory::Read_U32(request.in_vectors[0].address);\n   const u32 bytes_to_read = request.io_vectors[0].size;\n \n-  const auto iterator = m_export_title_context.contents.find(content_id);\n-  if (!m_export_title_context.valid || iterator == m_export_title_context.contents.end() ||\n+  const auto iterator = context.title_export.contents.find(content_id);\n+  if (!context.title_export.valid || iterator == context.title_export.contents.end() ||\n       iterator->second.content.m_position >= iterator->second.content.m_content.size)\n   {\n     return GetDefaultReply(ES_EINVAL);\n@@ -479,7 +483,7 @@ IPCCommandResult ES::ExportContentData(const IOCtlVRequest& request)\n   std::vector<u8> output(buffer.size());\n \n   mbedtls_aes_context aes_ctx;\n-  mbedtls_aes_setkey_enc(&aes_ctx, m_export_title_context.title_key.data(), 128);\n+  mbedtls_aes_setkey_enc(&aes_ctx, context.title_export.title_key.data(), 128);\n   const int ret = mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT, buffer.size(),\n                                         iterator->second.iv.data(), buffer.data(), output.data());\n   if (ret != 0)\n@@ -494,15 +498,15 @@ IPCCommandResult ES::ExportContentData(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::ExportContentEnd(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportContentEnd(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0) || request.in_vectors[0].size != 4)\n     return GetDefaultReply(ES_EINVAL);\n \n   const u32 content_id = Memory::Read_U32(request.in_vectors[0].address);\n \n-  const auto iterator = m_export_title_context.contents.find(content_id);\n-  if (!m_export_title_context.valid || iterator == m_export_title_context.contents.end() ||\n+  const auto iterator = context.title_export.contents.find(content_id);\n+  if (!context.title_export.valid || iterator == context.title_export.contents.end() ||\n       iterator->second.content.m_position != iterator->second.content.m_content.size)\n   {\n     return GetDefaultReply(ES_EINVAL);\n@@ -513,16 +517,16 @@ IPCCommandResult ES::ExportContentEnd(const IOCtlVRequest& request)\n   const auto& content_loader = AccessContentDevice(iterator->second.content.m_title_id);\n   content_loader.GetContentByID(iterator->second.content.m_content.id)->m_Data->Close();\n \n-  m_export_title_context.contents.erase(iterator);\n+  context.title_export.contents.erase(iterator);\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::ExportTitleDone(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportTitleDone(Context& context, const IOCtlVRequest& request)\n {\n-  if (!m_export_title_context.valid)\n+  if (!context.title_export.valid)\n     return GetDefaultReply(ES_EINVAL);\n \n-  m_export_title_context.valid = false;\n+  context.title_export.valid = false;\n   return GetDefaultReply(IPC_SUCCESS);\n }\n }  // namespace Device\ndiff --git a/Source/Core/Core/IOS/FS/FileIO.cpp b/Source/Core/Core/IOS/FS/FileIO.cpp\nindex dbc2f020..4c11d82 100644\n--- a/Source/Core/Core/IOS/FS/FileIO.cpp\n+++ b/Source/Core/Core/IOS/FS/FileIO.cpp\n@@ -76,7 +76,7 @@ FileIO::FileIO(u32 device_id, const std::string& device_name)\n {\n }\n \n-void FileIO::Close()\n+ReturnCode FileIO::Close(u32 fd)\n {\n   INFO_LOG(IOS_FILEIO, "FileIO: Close %s (DeviceID=%08x)", m_name.c_str(), m_device_id);\n   m_Mode = 0;\n@@ -86,6 +86,7 @@ void FileIO::Close()\n   m_file.reset();\n \n   m_is_active = false;\n+  return IPC_SUCCESS;\n }\n \n ReturnCode FileIO::Open(const OpenRequest& request)\ndiff --git a/Source/Core/Core/IOS/FS/FileIO.h b/Source/Core/Core/IOS/FS/FileIO.h\nindex 0e5698c..f341208 100644\n--- a/Source/Core/Core/IOS/FS/FileIO.h\n+++ b/Source/Core/Core/IOS/FS/FileIO.h\n@@ -32,7 +32,7 @@ class FileIO : public Device\n public:\n   FileIO(u32 device_id, const std::string& device_name);\n \n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   ReturnCode Open(const OpenRequest& request) override;\n   IPCCommandResult Seek(const SeekRequest& request) override;\n   IPCCommandResult Read(const ReadWriteRequest& request) override;\ndiff --git a/Source/Core/Core/IOS/IPC.cpp b/Source/Core/Core/IOS/IPC.cpp\nindex 00d2087..2906f20 100644\n--- a/Source/Core/Core/IOS/IPC.cpp\n+++ b/Source/Core/Core/IOS/IPC.cpp\n@@ -75,9 +75,7 @@ static std::mutex s_device_map_mutex;\n \n // STATE_TO_SAVE\n constexpr u8 IPC_MAX_FDS = 0x18;\n-constexpr u8 ES_MAX_COUNT = 3;\n static std::shared_ptr<Device::Device> s_fdmap[IPC_MAX_FDS];\n-static std::shared_ptr<Device::ES> s_es_handles[ES_MAX_COUNT];\n \n using IPCMsgQueue = std::deque<u32>;\n static IPCMsgQueue s_request_queue;  // ppc -> arm\n@@ -595,11 +593,7 @@ static void AddStaticDevices()\n   AddDevice<Device::STMImmediate>("/dev/stm/immediate");\n   AddDevice<Device::STMEventHook>("/dev/stm/eventhook");\n   AddDevice<Device::FS>("/dev/fs");\n-\n-  // IOS allows three ES devices at a time\n-  for (auto& es_device : s_es_handles)\n-    es_device = AddDevice<Device::ES>("/dev/es");\n-\n+  AddDevice<Device::ES>("/dev/es");\n   AddDevice<Device::DI>("/dev/di");\n   AddDevice<Device::NetKDRequest>("/dev/net/kd/request");\n   AddDevice<Device::NetKDTime>("/dev/net/kd/time");\n@@ -643,7 +637,7 @@ static void Reset()\n   {\n     if (!device)\n       continue;\n-    device->Close();\n+    device->Close(0);\n     device.reset();\n   }\n \n@@ -701,7 +695,6 @@ bool Reload(const u64 ios_title_id)\n \n   AddStaticDevices();\n \n-  Device::ES::Init();\n   return true;\n }\n \n@@ -855,13 +848,6 @@ void DoState(PointerWrap& p)\n         }\n       }\n     }\n-\n-    for (auto& es_device : s_es_handles)\n-    {\n-      const u32 handle_id = es_device->GetDeviceID();\n-      p.Do(handle_id);\n-      es_device = std::static_pointer_cast<Device::ES>(AccessDeviceByID(handle_id));\n-    }\n   }\n   else\n   {\n@@ -884,24 +870,11 @@ void DoState(PointerWrap& p)\n         }\n       }\n     }\n-\n-    for (const auto& es_device : s_es_handles)\n-    {\n-      const u32 handle_id = es_device->GetDeviceID();\n-      p.Do(handle_id);\n-    }\n   }\n }\n \n-static std::shared_ptr<Device::Device> GetUnusedESDevice()\n-{\n-  const auto iterator = std::find_if(std::begin(s_es_handles), std::end(s_es_handles),\n-                                     [](const auto& es_device) { return !es_device->IsOpened(); });\n-  return (iterator != std::end(s_es_handles)) ? *iterator : nullptr;\n-}\n-\n // Returns the FD for the newly opened device (on success) or an error code.\n-static s32 OpenDevice(const OpenRequest& request)\n+static s32 OpenDevice(OpenRequest& request)\n {\n   const s32 new_fd = GetFreeDeviceID();\n   INFO_LOG(IOS, "Opening %s (mode %d, fd %d)", request.path.c_str(), request.flags, new_fd);\n@@ -910,15 +883,10 @@ static s32 OpenDevice(const OpenRequest& request)\n     ERROR_LOG(IOS, "Couldn\'t get a free fd, too many open files");\n     return FS_EFDEXHAUSTED;\n   }\n+  request.fd = new_fd;\n \n   std::shared_ptr<Device::Device> device;\n-  if (request.path == "/dev/es")\n-  {\n-    device = GetUnusedESDevice();\n-    if (!device)\n-      return ES_FD_EXHAUSTED;\n-  }\n-  else if (request.path.find("/dev/usb/oh0/") == 0 && !GetDeviceByName(request.path))\n+  if (request.path.find("/dev/usb/oh0/") == 0 && !GetDeviceByName(request.path))\n   {\n     device = std::make_shared<Device::OH0Device>(new_fd, request.path);\n   }\n@@ -961,8 +929,7 @@ static IPCCommandResult HandleCommand(const Request& request)\n   {\n   case IPC_CMD_CLOSE:\n     s_fdmap[request.fd].reset();\n-    device->Close();\n-    return Device::Device::GetDefaultReply(IPC_SUCCESS);\n+    return Device::Device::GetDefaultReply(device->Close(request.fd));\n   case IPC_CMD_READ:\n     return device->Read(ReadWriteRequest{request.address});\n   case IPC_CMD_WRITE:\ndiff --git a/Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp b/Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp\nindex 96a2d48..4987fae 100644\n--- a/Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp\n+++ b/Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp\n@@ -83,13 +83,13 @@ ReturnCode SDIOSlot0::Open(const OpenRequest& request)\n   return IPC_SUCCESS;\n }\n \n-void SDIOSlot0::Close()\n+ReturnCode SDIOSlot0::Close(u32 fd)\n {\n   m_Card.Close();\n   m_BlockLength = 0;\n   m_BusWidth = 0;\n \n-  m_is_active = false;\n+  return Device::Close(fd);\n }\n \n IPCCommandResult SDIOSlot0::IOCtl(const IOCtlRequest& request)\ndiff --git a/Source/Core/Core/IOS/SDIO/SDIOSlot0.h b/Source/Core/Core/IOS/SDIO/SDIOSlot0.h\nindex 6fd08a9..116625f 100644\n--- a/Source/Core/Core/IOS/SDIO/SDIOSlot0.h\n+++ b/Source/Core/Core/IOS/SDIO/SDIOSlot0.h\n@@ -31,7 +31,7 @@ class SDIOSlot0 : public Device\n   void DoState(PointerWrap& p) override;\n \n   ReturnCode Open(const OpenRequest& request) override;\n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtl(const IOCtlRequest& request) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n \ndiff --git a/Source/Core/Core/IOS/STM/STM.cpp b/Source/Core/Core/IOS/STM/STM.cpp\nindex 1330c42..aece7e3 100644\n--- a/Source/Core/Core/IOS/STM/STM.cpp\n+++ b/Source/Core/Core/IOS/STM/STM.cpp\n@@ -67,10 +67,10 @@ IPCCommandResult STMImmediate::IOCtl(const IOCtlRequest& request)\n   return GetDefaultReply(return_value);\n }\n \n-void STMEventHook::Close()\n+ReturnCode STMEventHook::Close(u32 fd)\n {\n   s_event_hook_request.reset();\n-  m_is_active = false;\n+  return Device::Close(fd);\n }\n \n IPCCommandResult STMEventHook::IOCtl(const IOCtlRequest& request)\ndiff --git a/Source/Core/Core/IOS/STM/STM.h b/Source/Core/Core/IOS/STM/STM.h\nindex 1a2f534..6721e3c 100644\n--- a/Source/Core/Core/IOS/STM/STM.h\n+++ b/Source/Core/Core/IOS/STM/STM.h\n@@ -55,7 +55,7 @@ class STMEventHook final : public Device\n {\n public:\n   STMEventHook(u32 device_id, const std::string& device_name) : Device(device_id, device_name) {}\n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtl(const IOCtlRequest& request) override;\n   void DoState(PointerWrap& p) override;\n \ndiff --git a/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp b/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp\nindex 901aa11..bf6c1c1 100644\n--- a/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp\n+++ b/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp\n@@ -147,7 +147,7 @@ bool BluetoothEmu::RemoteDisconnect(u16 _connectionHandle)\n   return SendEventDisconnect(_connectionHandle, 0x13);\n }\n \n-void BluetoothEmu::Close()\n+ReturnCode BluetoothEmu::Close(u32 fd)\n {\n   // Clean up state\n   m_ScanEnable = 0;\n@@ -156,7 +156,7 @@ void BluetoothEmu::Close()\n   m_HCIEndpoint.reset();\n   m_ACLEndpoint.reset();\n \n-  m_is_active = false;\n+  return Device::Close(fd);\n }\n \n IPCCommandResult BluetoothEmu::IOCtlV(const IOCtlVRequest& request)\ndiff --git a/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h b/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h\nindex 45e42ef..efb60cf 100644\n--- a/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h\n+++ b/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h\n@@ -49,7 +49,7 @@ class BluetoothEmu final : public BluetoothBase\n \n   virtual ~BluetoothEmu();\n \n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n \n   void Update() override;\ndiff --git a/Source/Core/Core/IOS/USB/Bluetooth/BTReal.cpp b/Source/Core/Core/IOS/USB/Bluetooth/BTReal.cpp\nindex cba2a3f..2563315 100644\n--- a/Source/Core/Core/IOS/USB/Bluetooth/BTReal.cpp\n+++ b/Source/Core/Core/IOS/USB/Bluetooth/BTReal.cpp\n@@ -149,7 +149,7 @@ ReturnCode BluetoothReal::Open(const OpenRequest& request)\n   return IPC_SUCCESS;\n }\n \n-void BluetoothReal::Close()\n+ReturnCode BluetoothReal::Close(u32 fd)\n {\n   if (m_handle)\n   {\n@@ -159,7 +159,7 @@ void BluetoothReal::Close()\n     m_handle = nullptr;\n   }\n \n-  m_is_active = false;\n+  return Device::Close(fd);\n }\n \n IPCCommandResult BluetoothReal::IOCtlV(const IOCtlVRequest& request)\ndiff --git a/Source/Core/Core/IOS/USB/Bluetooth/BTReal.h b/Source/Core/Core/IOS/USB/Bluetooth/BTReal.h\nindex dc16799..3acc462 100644\n--- a/Source/Core/Core/IOS/USB/Bluetooth/BTReal.h\n+++ b/Source/Core/Core/IOS/USB/Bluetooth/BTReal.h\n@@ -52,7 +52,7 @@ class BluetoothReal final : public BluetoothBase\n   ~BluetoothReal() override;\n \n   ReturnCode Open(const OpenRequest& request) override;\n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n \n   void DoState(PointerWrap& p) override;\ndiff --git a/Source/Core/Core/IOS/USB/OH0/OH0Device.cpp b/Source/Core/Core/IOS/USB/OH0/OH0Device.cpp\nindex 61bbd44..03b3e7d 100644\n--- a/Source/Core/Core/IOS/USB/OH0/OH0Device.cpp\n+++ b/Source/Core/Core/IOS/USB/OH0/OH0Device.cpp\n@@ -68,9 +68,10 @@ ReturnCode OH0Device::Open(const OpenRequest& request)\n   return return_code;\n }\n \n-void OH0Device::Close()\n+ReturnCode OH0Device::Close(u32 fd)\n {\n   m_oh0->DeviceClose(m_device_id);\n+  return Device::Close(fd);\n }\n \n IPCCommandResult OH0Device::IOCtl(const IOCtlRequest& request)\ndiff --git a/Source/Core/Core/IOS/USB/OH0/OH0Device.h b/Source/Core/Core/IOS/USB/OH0/OH0Device.h\nindex 239622d..c66ccc4 100644\n--- a/Source/Core/Core/IOS/USB/OH0/OH0Device.h\n+++ b/Source/Core/Core/IOS/USB/OH0/OH0Device.h\n@@ -25,7 +25,7 @@ class OH0Device final : public Device\n   OH0Device(u32 device_id, const std::string& device_name);\n \n   ReturnCode Open(const OpenRequest& request) override;\n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtl(const IOCtlRequest& request) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n   void DoState(PointerWrap& p) override;\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325415, 'ssid': 3280}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-win-dbg-x64', 'builderid': 7}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325414, 'buildrequestid': 20651, 'claimed': True, 'builderid': 7, 'complete_at': None, 'buildsetid': 5935, 'complete': False, 'results': -1, 'claimed_at': 1493325618}, 'number': 1060, 'complete_at': 1493325715, 'state_string': 'finished', 'workerid': 4, 'builderid': 7, 'complete': True, 'results': 0, 'properties': {'branchname': ['pr-5333', 'try build'], 'scheduler': ['pr', 'Scheduler'], 'branch': [None, 'Build'], 'got_revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'GitNoBranch'], 'buildnumber': [1060, 'Build'], 'workername': ['windows', 'Worker'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'builddir': ['C:\\buildbot\\pr-win-dbg-x64', 'worker'], 'warnings-count': [0, 'WarningCountingShellCommand'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'slavename': ['windows', 'Worker (deprecated)'], 'headrev': ['4213ea1bb4e92bbf3a4824be0833aeb4c3678575', 'try build'], 'pr_id': [5333, 'try build'], 'buildername': ['pr-win-dbg-x64', 'Builder'], 'project': ['', 'Build'], 'codebase': ['', 'Build'], 'repository': ['', 'Build'], 'shortrev': ['4213ea', 'try build'], 'build_url': ['http://dl.dolphin-emu.org/prs/pr-5333-dolphin-latest-dbg-x64.7z', 'SetProperty']}}}
2017-04-27T20:40:18.632100	{'source': 'webserver', 'bb_type': 'starting', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325618, 'url': 'https://buildbot.dolphin-emu.org/#builders/7/builds/1060', 'buildid': 12533, 'masterid': 1, 'buildrequestid': 20651, 'buildset': {'parent_buildid': None, 'external_idstring': '5333-4213ea', 'bsid': 5935, 'submitted_at': 1493325414, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2964, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5333 (4213ea1bb4e92bbf3a4824be0833aeb4c3678575).', 'body': 'From 4213ea1bb4e92bbf3a4824be0833aeb4c3678575 Mon Sep 17 00:00:00 2001\nFrom: =?UTF-8?q?L=C3=A9o=20Lam?= <leo@innovatetechnologi.es>\nDate: Thu, 27 Apr 2017 21:22:04 +0200\nSubject: [PATCH] IOS/ES: Handle contexts properly\n\nThis changes the IOS code to handle ES contexts inside of ES, instead\nof leaking out implementation details into the IPC request dispatcher.\n\nThe intent is to clarify what\'s shared between every single ES context,\nand what is specific to an ES context. (Not much.) This should reduce\nthe number of static members in the ES class.\n\nThe other changes are there just because we now keep track of the\nIPC FD inside of ES.\n\nFuture plans:\n\n* After the WAD direct launch hack is dropped, the title context\n  will be made a class member.\n\n* Have proper function prototypes, instead of having every single one\n  of them take ioctlv requests. This will allow reusing IOS code in\n  other parts of the Dolphin codebase without having to construct\n  ioctlv requests.\n---\n Source/Core/Core/IOS/Device.cpp               |   3 +-\n Source/Core/Core/IOS/Device.h                 |   2 +-\n Source/Core/Core/IOS/DeviceStub.cpp           |   6 --\n Source/Core/Core/IOS/DeviceStub.h             |   1 -\n Source/Core/Core/IOS/ES/ES.cpp                | 116 ++++++++++++++---------\n Source/Core/Core/IOS/ES/ES.h                  | 104 ++++++++++++---------\n Source/Core/Core/IOS/ES/Identity.cpp          |   4 +-\n Source/Core/Core/IOS/ES/TitleContents.cpp     |  10 +-\n Source/Core/Core/IOS/ES/TitleManagement.cpp   | 128 +++++++++++++-------------\n Source/Core/Core/IOS/FS/FileIO.cpp            |   3 +-\n Source/Core/Core/IOS/FS/FileIO.h              |   2 +-\n Source/Core/Core/IOS/IPC.cpp                  |  45 ++-------\n Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp       |   4 +-\n Source/Core/Core/IOS/SDIO/SDIOSlot0.h         |   2 +-\n Source/Core/Core/IOS/STM/STM.cpp              |   4 +-\n Source/Core/Core/IOS/STM/STM.h                |   2 +-\n Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp  |   4 +-\n Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h    |   2 +-\n Source/Core/Core/IOS/USB/Bluetooth/BTReal.cpp |   4 +-\n Source/Core/Core/IOS/USB/Bluetooth/BTReal.h   |   2 +-\n Source/Core/Core/IOS/USB/OH0/OH0Device.cpp    |   3 +-\n Source/Core/Core/IOS/USB/OH0/OH0Device.h      |   2 +-\n 22 files changed, 232 insertions(+), 221 deletions(-)\n\ndiff --git a/Source/Core/Core/IOS/Device.cpp b/Source/Core/Core/IOS/Device.cpp\nindex 5d38c7e..e407d54 100644\n--- a/Source/Core/Core/IOS/Device.cpp\n+++ b/Source/Core/Core/IOS/Device.cpp\n@@ -154,9 +154,10 @@ ReturnCode Device::Open(const OpenRequest& request)\n   return IPC_SUCCESS;\n }\n \n-void Device::Close()\n+ReturnCode Device::Close(u32 fd)\n {\n   m_is_active = false;\n+  return IPC_SUCCESS;\n }\n \n IPCCommandResult Device::Unsupported(const Request& request)\ndiff --git a/Source/Core/Core/IOS/Device.h b/Source/Core/Core/IOS/Device.h\nindex 91d2dbb..c8dd0cc 100644\n--- a/Source/Core/Core/IOS/Device.h\n+++ b/Source/Core/Core/IOS/Device.h\n@@ -185,7 +185,7 @@ class Device\n   // Replies to Open and Close requests are sent by the IPC request handler (HandleCommand),\n   // not by the devices themselves.\n   virtual ReturnCode Open(const OpenRequest& request);\n-  virtual void Close();\n+  virtual ReturnCode Close(u32 fd);\n   virtual IPCCommandResult Seek(const SeekRequest& seek) { return Unsupported(seek); }\n   virtual IPCCommandResult Read(const ReadWriteRequest& read) { return Unsupported(read); }\n   virtual IPCCommandResult Write(const ReadWriteRequest& write) { return Unsupported(write); }\ndiff --git a/Source/Core/Core/IOS/DeviceStub.cpp b/Source/Core/Core/IOS/DeviceStub.cpp\nindex cdd74ac..2502c84 100644\n--- a/Source/Core/Core/IOS/DeviceStub.cpp\n+++ b/Source/Core/Core/IOS/DeviceStub.cpp\n@@ -22,12 +22,6 @@ ReturnCode Stub::Open(const OpenRequest& request)\n   return IPC_SUCCESS;\n }\n \n-void Stub::Close()\n-{\n-  WARN_LOG(IOS, "%s faking Close()", m_name.c_str());\n-  m_is_active = false;\n-}\n-\n IPCCommandResult Stub::IOCtl(const IOCtlRequest& request)\n {\n   WARN_LOG(IOS, "%s faking IOCtl()", m_name.c_str());\ndiff --git a/Source/Core/Core/IOS/DeviceStub.h b/Source/Core/Core/IOS/DeviceStub.h\nindex 6b7298c..b6b60b0 100644\n--- a/Source/Core/Core/IOS/DeviceStub.h\n+++ b/Source/Core/Core/IOS/DeviceStub.h\n@@ -22,7 +22,6 @@ class Stub final : public Device\n   Stub(u32 device_id, const std::string& device_name);\n \n   ReturnCode Open(const OpenRequest& request) override;\n-  void Close() override;\n   IPCCommandResult IOCtl(const IOCtlRequest& request) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n };\ndiff --git a/Source/Core/Core/IOS/ES/ES.cpp b/Source/Core/Core/IOS/ES/ES.cpp\nindex 29ea0de..cc9f94d 100644\n--- a/Source/Core/Core/IOS/ES/ES.cpp\n+++ b/Source/Core/Core/IOS/ES/ES.cpp\n@@ -4,6 +4,7 @@\n \n #include "Core/IOS/ES/ES.h"\n \n+#include <algorithm>\n #include <cinttypes>\n #include <cstdio>\n #include <memory>\n@@ -27,17 +28,13 @@ namespace HLE\n {\n namespace Device\n {\n-// Shared across all ES instances.\n+// TODO: drop this and convert the title context into a member once the WAD launch hack is gone.\n static std::string s_content_file;\n static TitleContext s_title_context;\n \n // Title to launch after IOS has been reset and reloaded (similar to /sys/launch.sys).\n static u64 s_title_to_launch;\n \n-ES::ES(u32 device_id, const std::string& device_name) : Device(device_id, device_name)\n-{\n-}\n-\n static void FinishAllStaleImports()\n {\n   const std::vector<u64> titles = IOS::ES::GetTitleImports();\n@@ -58,7 +55,7 @@ static void FinishAllStaleImports()\n   File::CreateDir(import_dir);\n }\n \n-void ES::Init()\n+ES::ES(u32 device_id, const std::string& device_name) : Device(device_id, device_name)\n {\n   FinishAllStaleImports();\n \n@@ -182,14 +179,14 @@ static ReturnCode CheckIsAllowedToSetUID(const u32 caller_uid)\n   return caller_uid == system_menu_uid ? IPC_SUCCESS : ES_EINVAL;\n }\n \n-IPCCommandResult ES::SetUID(const IOCtlVRequest& request)\n+IPCCommandResult ES::SetUID(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0) || request.in_vectors[0].size != 8)\n     return GetDefaultReply(ES_EINVAL);\n \n   const u64 title_id = Memory::Read_U64(request.in_vectors[0].address);\n \n-  const s32 ret = CheckIsAllowedToSetUID(m_caller_uid);\n+  const s32 ret = CheckIsAllowedToSetUID(uid);\n   if (ret < 0)\n   {\n     ERROR_LOG(IOS_ES, "SetUID: Permission check failed with error %d", ret);\n@@ -279,6 +276,24 @@ bool ES::LaunchPPCTitle(u64 title_id, bool skip_reload)\n   return BootstrapPPC(content_loader);\n }\n \n+void ES::Context::DoState(PointerWrap& p)\n+{\n+  p.Do(uid);\n+  p.Do(gid);\n+\n+  title_import.tmd.DoState(p);\n+  p.Do(title_import.content_id);\n+  p.Do(title_import.content_buffer);\n+\n+  p.Do(title_export.valid);\n+  title_export.tmd.DoState(p);\n+  p.Do(title_export.title_key);\n+  p.Do(title_export.contents);\n+\n+  p.Do(active);\n+  p.Do(ipc_fd);\n+}\n+\n void ES::DoState(PointerWrap& p)\n {\n   Device::DoState(p);\n@@ -286,17 +301,8 @@ void ES::DoState(PointerWrap& p)\n   p.Do(m_AccessIdentID);\n   s_title_context.DoState(p);\n \n-  m_addtitle_tmd.DoState(p);\n-  p.Do(m_addtitle_content_id);\n-  p.Do(m_addtitle_content_buffer);\n-\n-  p.Do(m_caller_uid);\n-  p.Do(m_caller_gid);\n-\n-  p.Do(m_export_title_context.valid);\n-  m_export_title_context.tmd.DoState(p);\n-  p.Do(m_export_title_context.title_key);\n-  p.Do(m_export_title_context.contents);\n+  for (auto& context : m_contexts)\n+    context.DoState(p);\n \n   u32 Count = (u32)(m_ContentAccessMap.size());\n   p.Do(Count);\n@@ -322,16 +328,36 @@ void ES::DoState(PointerWrap& p)\n   }\n }\n \n+std::array<ES::Context, 3>::iterator ES::FindActiveContext(u32 fd)\n+{\n+  return std::find_if(m_contexts.begin(), m_contexts.end(),\n+                      [fd](const auto& context) { return context.ipc_fd == fd && context.active; });\n+}\n+\n ReturnCode ES::Open(const OpenRequest& request)\n {\n-  m_caller_uid = request.uid;\n-  m_caller_gid = request.gid;\n+  auto context =\n+      std::find_if(m_contexts.begin(), m_contexts.end(), [](const auto& c) { return !c.active; });\n+  if (context == m_contexts.end())\n+    return ES_FD_EXHAUSTED;\n+\n+  context->active = true;\n+  context->uid = request.uid;\n+  context->gid = request.gid;\n+  context->ipc_fd = request.fd;\n   return Device::Open(request);\n }\n \n-void ES::Close()\n+ReturnCode ES::Close(u32 fd)\n {\n-  // XXX: does IOS really clear the content access map here?\n+  auto context = FindActiveContext(fd);\n+  if (context == m_contexts.end())\n+    return ES_EINVAL;\n+\n+  context->active = false;\n+  context->ipc_fd = -1;\n+\n+  // FIXME: IOS doesn\'t clear the content access map here.\n   m_ContentAccessMap.clear();\n   m_AccessIdentID = 0;\n \n@@ -339,48 +365,52 @@ void ES::Close()\n   m_is_active = false;\n   // clear the NAND content cache to make sure nothing remains open.\n   DiscIO::CNANDContentManager::Access().ClearCache();\n+  return IPC_SUCCESS;\n }\n \n IPCCommandResult ES::IOCtlV(const IOCtlVRequest& request)\n {\n   DEBUG_LOG(IOS_ES, "%s (0x%x)", GetDeviceName().c_str(), request.request);\n+  auto context = FindActiveContext(request.fd);\n+  if (context == m_contexts.end())\n+    return GetDefaultReply(ES_EINVAL);\n \n   switch (request.request)\n   {\n   case IOCTL_ES_ADDTICKET:\n     return AddTicket(request);\n   case IOCTL_ES_ADDTMD:\n-    return AddTMD(request);\n+    return AddTMD(*context, request);\n   case IOCTL_ES_ADDTITLESTART:\n-    return AddTitleStart(request);\n+    return AddTitleStart(*context, request);\n   case IOCTL_ES_ADDCONTENTSTART:\n-    return AddContentStart(request);\n+    return AddContentStart(*context, request);\n   case IOCTL_ES_ADDCONTENTDATA:\n-    return AddContentData(request);\n+    return AddContentData(*context, request);\n   case IOCTL_ES_ADDCONTENTFINISH:\n-    return AddContentFinish(request);\n+    return AddContentFinish(*context, request);\n   case IOCTL_ES_ADDTITLEFINISH:\n-    return AddTitleFinish(request);\n+    return AddTitleFinish(*context, request);\n   case IOCTL_ES_ADDTITLECANCEL:\n-    return AddTitleCancel(request);\n+    return AddTitleCancel(*context, request);\n   case IOCTL_ES_GETDEVICEID:\n     return GetConsoleID(request);\n   case IOCTL_ES_OPENTITLECONTENT:\n-    return OpenTitleContent(request);\n+    return OpenTitleContent(context->uid, request);\n   case IOCTL_ES_OPENCONTENT:\n-    return OpenContent(request);\n+    return OpenContent(context->uid, request);\n   case IOCTL_ES_READCONTENT:\n-    return ReadContent(request);\n+    return ReadContent(context->uid, request);\n   case IOCTL_ES_CLOSECONTENT:\n-    return CloseContent(request);\n+    return CloseContent(context->uid, request);\n   case IOCTL_ES_SEEKCONTENT:\n-    return SeekContent(request);\n+    return SeekContent(context->uid, request);\n   case IOCTL_ES_GETTITLEDIR:\n     return GetTitleDirectory(request);\n   case IOCTL_ES_GETTITLEID:\n     return GetTitleID(request);\n   case IOCTL_ES_SETUID:\n-    return SetUID(request);\n+    return SetUID(context->uid, request);\n   case IOCTL_ES_DIVERIFY:\n     return DIVerify(request);\n \n@@ -441,23 +471,23 @@ IPCCommandResult ES::IOCtlV(const IOCtlVRequest& request)\n   case IOCTL_ES_GETSTOREDTMD:\n     return GetStoredTMD(request);\n   case IOCTL_ES_ENCRYPT:\n-    return Encrypt(request);\n+    return Encrypt(context->uid, request);\n   case IOCTL_ES_DECRYPT:\n-    return Decrypt(request);\n+    return Decrypt(context->uid, request);\n   case IOCTL_ES_LAUNCH:\n     return Launch(request);\n   case IOCTL_ES_LAUNCHBC:\n     return LaunchBC(request);\n   case IOCTL_ES_EXPORTTITLEINIT:\n-    return ExportTitleInit(request);\n+    return ExportTitleInit(*context, request);\n   case IOCTL_ES_EXPORTCONTENTBEGIN:\n-    return ExportContentBegin(request);\n+    return ExportContentBegin(*context, request);\n   case IOCTL_ES_EXPORTCONTENTDATA:\n-    return ExportContentData(request);\n+    return ExportContentData(*context, request);\n   case IOCTL_ES_EXPORTCONTENTEND:\n-    return ExportContentEnd(request);\n+    return ExportContentEnd(*context, request);\n   case IOCTL_ES_EXPORTTITLEDONE:\n-    return ExportTitleDone(request);\n+    return ExportTitleDone(*context, request);\n   case IOCTL_ES_CHECKKOREAREGION:\n     return CheckKoreaRegion(request);\n   case IOCTL_ES_GETDEVICECERT:\ndiff --git a/Source/Core/Core/IOS/ES/ES.h b/Source/Core/Core/IOS/ES/ES.h\nindex e7cb5c6..3c769e4 100644\n--- a/Source/Core/Core/IOS/ES/ES.h\n+++ b/Source/Core/Core/IOS/ES/ES.h\n@@ -45,9 +45,6 @@ class ES final : public Device\n public:\n   ES(u32 device_id, const std::string& device_name);\n \n-  // Called after an IOS reload.\n-  static void Init();\n-\n   static s32 DIVerify(const IOS::ES::TMDReader& tmd, const IOS::ES::TicketReader& ticket);\n   static void LoadWAD(const std::string& _rContentFile);\n   static bool LaunchTitle(u64 title_id, bool skip_reload = false);\n@@ -58,7 +55,7 @@ class ES final : public Device\n   void DoState(PointerWrap& p) override;\n \n   ReturnCode Open(const OpenRequest& request) override;\n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n \n private:\n@@ -155,20 +152,55 @@ class ES final : public Device\n     u8 padding[0x3c];\n   };\n \n+  struct TitleImportContext\n+  {\n+    IOS::ES::TMDReader tmd;\n+    u32 content_id = 0xFFFFFFFF;\n+    std::vector<u8> content_buffer;\n+  };\n+\n+  // TODO: merge this with TitleImportContext. Also reuse the global content table.\n+  struct TitleExportContext\n+  {\n+    struct ExportContent\n+    {\n+      OpenedContent content;\n+      std::array<u8, 16> iv{};\n+    };\n+\n+    bool valid = false;\n+    IOS::ES::TMDReader tmd;\n+    std::vector<u8> title_key;\n+    std::map<u32, ExportContent> contents;\n+  };\n+\n+  struct Context\n+  {\n+    void DoState(PointerWrap& p);\n+\n+    u16 gid = 0;\n+    u32 uid = 0;\n+    TitleImportContext title_import;\n+    TitleExportContext title_export;\n+    bool active = false;\n+    // We use this to associate an IPC fd with an ES context.\n+    u32 ipc_fd = -1;\n+  };\n+\n   // Title management\n   IPCCommandResult AddTicket(const IOCtlVRequest& request);\n-  IPCCommandResult AddTMD(const IOCtlVRequest& request);\n-  IPCCommandResult AddTitleStart(const IOCtlVRequest& request);\n-  IPCCommandResult AddContentStart(const IOCtlVRequest& request);\n-  IPCCommandResult AddContentData(const IOCtlVRequest& request);\n-  IPCCommandResult AddContentFinish(const IOCtlVRequest& request);\n-  IPCCommandResult AddTitleFinish(const IOCtlVRequest& request);\n-  IPCCommandResult AddTitleCancel(const IOCtlVRequest& request);\n-  IPCCommandResult ExportTitleInit(const IOCtlVRequest& request);\n-  IPCCommandResult ExportContentBegin(const IOCtlVRequest& request);\n-  IPCCommandResult ExportContentData(const IOCtlVRequest& request);\n-  IPCCommandResult ExportContentEnd(const IOCtlVRequest& request);\n-  IPCCommandResult ExportTitleDone(const IOCtlVRequest& request);\n+  IPCCommandResult AddTMD(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddTitleStart(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddContentStart(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddContentData(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddContentFinish(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddTitleFinish(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddTitleCancel(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportTitleInit(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportContentBegin(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportContentData(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportContentEnd(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportTitleDone(Context& context, const IOCtlVRequest& request);\n   IPCCommandResult DeleteTitle(const IOCtlVRequest& request);\n   IPCCommandResult DeleteTicket(const IOCtlVRequest& request);\n   IPCCommandResult DeleteTitleContent(const IOCtlVRequest& request);\n@@ -178,11 +210,11 @@ class ES final : public Device\n   IPCCommandResult GetDeviceCertificate(const IOCtlVRequest& request);\n   IPCCommandResult CheckKoreaRegion(const IOCtlVRequest& request);\n   IPCCommandResult Sign(const IOCtlVRequest& request);\n-  IPCCommandResult Encrypt(const IOCtlVRequest& request);\n-  IPCCommandResult Decrypt(const IOCtlVRequest& request);\n+  IPCCommandResult Encrypt(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult Decrypt(u32 uid, const IOCtlVRequest& request);\n \n   // Misc\n-  IPCCommandResult SetUID(const IOCtlVRequest& request);\n+  IPCCommandResult SetUID(u32 uid, const IOCtlVRequest& request);\n   IPCCommandResult GetTitleDirectory(const IOCtlVRequest& request);\n   IPCCommandResult GetTitleID(const IOCtlVRequest& request);\n   IPCCommandResult GetConsumption(const IOCtlVRequest& request);\n@@ -191,11 +223,11 @@ class ES final : public Device\n   IPCCommandResult DIVerify(const IOCtlVRequest& request);\n \n   // Title contents\n-  IPCCommandResult OpenTitleContent(const IOCtlVRequest& request);\n-  IPCCommandResult OpenContent(const IOCtlVRequest& request);\n-  IPCCommandResult ReadContent(const IOCtlVRequest& request);\n-  IPCCommandResult CloseContent(const IOCtlVRequest& request);\n-  IPCCommandResult SeekContent(const IOCtlVRequest& request);\n+  IPCCommandResult OpenTitleContent(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult OpenContent(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult ReadContent(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult CloseContent(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult SeekContent(u32 uid, const IOCtlVRequest& request);\n \n   // Title information\n   IPCCommandResult GetTitleCount(const std::vector<u64>& titles, const IOCtlVRequest& request);\n@@ -228,6 +260,8 @@ class ES final : public Device\n   IPCCommandResult DIGetTMDSize(const IOCtlVRequest& request);\n   IPCCommandResult DIGetTMD(const IOCtlVRequest& request);\n \n+  std::array<Context, 3>::iterator FindActiveContext(u32 fd);\n+\n   static bool LaunchIOS(u64 ios_title_id);\n   static bool LaunchPPCTitle(u64 title_id, bool skip_reload);\n   static TitleContext& GetTitleContext();\n@@ -241,27 +275,7 @@ class ES final : public Device\n \n   u32 m_AccessIdentID = 0;\n \n-  // For title installation (ioctls IOCTL_ES_ADDTITLE*).\n-  IOS::ES::TMDReader m_addtitle_tmd;\n-  u32 m_addtitle_content_id = 0xFFFFFFFF;\n-  std::vector<u8> m_addtitle_content_buffer;\n-\n-  u32 m_caller_uid = 0;\n-  u16 m_caller_gid = 0;\n-\n-  struct TitleExportContext\n-  {\n-    struct ExportContent\n-    {\n-      OpenedContent content;\n-      std::array<u8, 16> iv{};\n-    };\n-\n-    bool valid = false;\n-    IOS::ES::TMDReader tmd;\n-    std::vector<u8> title_key;\n-    std::map<u32, ExportContent> contents;\n-  } m_export_title_context;\n+  std::array<Context, 3> m_contexts;\n };\n }  // namespace Device\n }  // namespace HLE\ndiff --git a/Source/Core/Core/IOS/ES/Identity.cpp b/Source/Core/Core/IOS/ES/Identity.cpp\nindex c4b5722..3ae6ba5 100644\n--- a/Source/Core/Core/IOS/ES/Identity.cpp\n+++ b/Source/Core/Core/IOS/ES/Identity.cpp\n@@ -63,7 +63,7 @@ IPCCommandResult ES::GetConsoleID(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::Encrypt(const IOCtlVRequest& request)\n+IPCCommandResult ES::Encrypt(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(3, 2))\n     return GetDefaultReply(ES_EINVAL);\n@@ -85,7 +85,7 @@ IPCCommandResult ES::Encrypt(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::Decrypt(const IOCtlVRequest& request)\n+IPCCommandResult ES::Decrypt(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(3, 2))\n     return GetDefaultReply(ES_EINVAL);\ndiff --git a/Source/Core/Core/IOS/ES/TitleContents.cpp b/Source/Core/Core/IOS/ES/TitleContents.cpp\nindex d97b74d..6a5fc64 100644\n--- a/Source/Core/Core/IOS/ES/TitleContents.cpp\n+++ b/Source/Core/Core/IOS/ES/TitleContents.cpp\n@@ -48,7 +48,7 @@ u32 ES::OpenTitleContent(u32 CFD, u64 TitleID, u16 Index)\n   return CFD;\n }\n \n-IPCCommandResult ES::OpenTitleContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::OpenTitleContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(3, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -64,7 +64,7 @@ IPCCommandResult ES::OpenTitleContent(const IOCtlVRequest& request)\n   return GetDefaultReply(CFD);\n }\n \n-IPCCommandResult ES::OpenContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::OpenContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -79,7 +79,7 @@ IPCCommandResult ES::OpenContent(const IOCtlVRequest& request)\n   return GetDefaultReply(CFD);\n }\n \n-IPCCommandResult ES::ReadContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::ReadContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 1))\n     return GetDefaultReply(ES_EINVAL);\n@@ -131,7 +131,7 @@ IPCCommandResult ES::ReadContent(const IOCtlVRequest& request)\n   return GetDefaultReply(Size);\n }\n \n-IPCCommandResult ES::CloseContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::CloseContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -160,7 +160,7 @@ IPCCommandResult ES::CloseContent(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::SeekContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::SeekContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(3, 0))\n     return GetDefaultReply(ES_EINVAL);\ndiff --git a/Source/Core/Core/IOS/ES/TitleManagement.cpp b/Source/Core/Core/IOS/ES/TitleManagement.cpp\nindex a01e0f7..8426b15 100644\n--- a/Source/Core/Core/IOS/ES/TitleManagement.cpp\n+++ b/Source/Core/Core/IOS/ES/TitleManagement.cpp\n@@ -66,7 +66,7 @@ IPCCommandResult ES::AddTicket(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddTMD(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddTMD(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -76,18 +76,18 @@ IPCCommandResult ES::AddTMD(const IOCtlVRequest& request)\n \n   // Ioctlv 0x2b writes the TMD to /tmp/title.tmd (for imports) and doesn\'t seem to write it\n   // to either /import or /title. So here we simply have to set the import TMD.\n-  m_addtitle_tmd.SetBytes(std::move(tmd));\n+  context.title_import.tmd.SetBytes(std::move(tmd));\n   // TODO: validate TMDs and return the proper error code (-1027) if the signature type is invalid.\n-  if (!m_addtitle_tmd.IsValid())\n+  if (!context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n-  if (!IOS::ES::InitImport(m_addtitle_tmd.GetTitleId()))\n+  if (!IOS::ES::InitImport(context.title_import.tmd.GetTitleId()))\n     return GetDefaultReply(FS_EIO);\n \n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddTitleStart(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddTitleStart(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(4, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -96,19 +96,20 @@ IPCCommandResult ES::AddTitleStart(const IOCtlVRequest& request)\n   std::vector<u8> tmd(request.in_vectors[0].size);\n   Memory::CopyFromEmu(tmd.data(), request.in_vectors[0].address, request.in_vectors[0].size);\n \n-  m_addtitle_tmd.SetBytes(tmd);\n-  if (!m_addtitle_tmd.IsValid())\n+  context.title_import.tmd.SetBytes(tmd);\n+  if (!context.title_import.tmd.IsValid())\n   {\n     ERROR_LOG(IOS_ES, "Invalid TMD while adding title (size = %zd)", tmd.size());\n     return GetDefaultReply(ES_EINVAL);\n   }\n \n   // Finish a previous import (if it exists).\n-  const IOS::ES::TMDReader previous_tmd = IOS::ES::FindImportTMD(m_addtitle_tmd.GetTitleId());\n+  const IOS::ES::TMDReader previous_tmd =\n+      IOS::ES::FindImportTMD(context.title_import.tmd.GetTitleId());\n   if (previous_tmd.IsValid())\n     FinishImport(previous_tmd);\n \n-  if (!IOS::ES::InitImport(m_addtitle_tmd.GetTitleId()))\n+  if (!IOS::ES::InitImport(context.title_import.tmd.GetTitleId()))\n     return GetDefaultReply(FS_EIO);\n \n   // TODO: check and use the other vectors.\n@@ -116,7 +117,7 @@ IPCCommandResult ES::AddTitleStart(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddContentStart(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddContentStart(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(2, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -124,28 +125,28 @@ IPCCommandResult ES::AddContentStart(const IOCtlVRequest& request)\n   u64 title_id = Memory::Read_U64(request.in_vectors[0].address);\n   u32 content_id = Memory::Read_U32(request.in_vectors[1].address);\n \n-  if (m_addtitle_content_id != 0xFFFFFFFF)\n+  if (context.title_import.content_id != 0xFFFFFFFF)\n   {\n     ERROR_LOG(IOS_ES, "Trying to add content when we haven\'t finished adding "\n                       "another content. Unsupported.");\n     return GetDefaultReply(ES_EINVAL);\n   }\n-  m_addtitle_content_id = content_id;\n+  context.title_import.content_id = content_id;\n \n-  m_addtitle_content_buffer.clear();\n+  context.title_import.content_buffer.clear();\n \n   INFO_LOG(IOS_ES, "IOCTL_ES_ADDCONTENTSTART: title id %016" PRIx64 ", "\n                    "content id %08x",\n-           title_id, m_addtitle_content_id);\n+           title_id, context.title_import.content_id);\n \n-  if (!m_addtitle_tmd.IsValid())\n+  if (!context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n-  if (title_id != m_addtitle_tmd.GetTitleId())\n+  if (title_id != context.title_import.tmd.GetTitleId())\n   {\n     ERROR_LOG(IOS_ES, "IOCTL_ES_ADDCONTENTSTART: title id %016" PRIx64 " != "\n                       "TMD title id %016" PRIx64 ", ignoring",\n-              title_id, m_addtitle_tmd.GetTitleId());\n+              title_id, context.title_import.tmd.GetTitleId());\n   }\n \n   // We\'re supposed to return a "content file descriptor" here, which is\n@@ -156,7 +157,7 @@ IPCCommandResult ES::AddContentStart(const IOCtlVRequest& request)\n   return GetDefaultReply(content_fd);\n }\n \n-IPCCommandResult ES::AddContentData(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddContentData(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(2, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -168,7 +169,8 @@ IPCCommandResult ES::AddContentData(const IOCtlVRequest& request)\n \n   u8* data_start = Memory::GetPointer(request.in_vectors[1].address);\n   u8* data_end = data_start + request.in_vectors[1].size;\n-  m_addtitle_content_buffer.insert(m_addtitle_content_buffer.end(), data_start, data_end);\n+  context.title_import.content_buffer.insert(context.title_import.content_buffer.end(), data_start,\n+                                             data_end);\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n@@ -184,22 +186,22 @@ static std::string GetImportContentPath(u64 title_id, u32 content_id)\n   return Common::GetImportTitlePath(title_id) + StringFromFormat("/content/%08x.app", content_id);\n }\n \n-IPCCommandResult ES::AddContentFinish(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddContentFinish(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0))\n     return GetDefaultReply(ES_EINVAL);\n \n-  if (m_addtitle_content_id == 0xFFFFFFFF)\n+  if (context.title_import.content_id == 0xFFFFFFFF)\n     return GetDefaultReply(ES_EINVAL);\n \n   u32 content_fd = Memory::Read_U32(request.in_vectors[0].address);\n   INFO_LOG(IOS_ES, "IOCTL_ES_ADDCONTENTFINISH: content fd %08x", content_fd);\n \n-  if (!m_addtitle_tmd.IsValid())\n+  if (!context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n   // Try to find the title key from a pre-installed ticket.\n-  IOS::ES::TicketReader ticket = DiscIO::FindSignedTicket(m_addtitle_tmd.GetTitleId());\n+  IOS::ES::TicketReader ticket = DiscIO::FindSignedTicket(context.title_import.tmd.GetTitleId());\n   if (!ticket.IsValid())\n   {\n     return GetDefaultReply(ES_NO_TICKET);\n@@ -211,16 +213,16 @@ IPCCommandResult ES::AddContentFinish(const IOCtlVRequest& request)\n   // The IV for title content decryption is the lower two bytes of the\n   // content index, zero extended.\n   IOS::ES::Content content_info;\n-  if (!m_addtitle_tmd.FindContentById(m_addtitle_content_id, &content_info))\n+  if (!context.title_import.tmd.FindContentById(context.title_import.content_id, &content_info))\n   {\n     return GetDefaultReply(ES_EINVAL);\n   }\n   u8 iv[16] = {0};\n   iv[0] = (content_info.index >> 8) & 0xFF;\n   iv[1] = content_info.index & 0xFF;\n-  std::vector<u8> decrypted_data(m_addtitle_content_buffer.size());\n-  mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, m_addtitle_content_buffer.size(), iv,\n-                        m_addtitle_content_buffer.data(), decrypted_data.data());\n+  std::vector<u8> decrypted_data(context.title_import.content_buffer.size());\n+  mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, context.title_import.content_buffer.size(),\n+                        iv, context.title_import.content_buffer.data(), decrypted_data.data());\n   if (!CheckIfContentHashMatches(decrypted_data, content_info))\n   {\n     ERROR_LOG(IOS_ES, "AddContentFinish: Hash for content %08x doesn\'t match", content_info.id);\n@@ -235,12 +237,13 @@ IPCCommandResult ES::AddContentFinish(const IOCtlVRequest& request)\n   }\n   else\n   {\n-    content_path = GetImportContentPath(m_addtitle_tmd.GetTitleId(), m_addtitle_content_id);\n+    content_path = GetImportContentPath(context.title_import.tmd.GetTitleId(),\n+                                        context.title_import.content_id);\n   }\n   File::CreateFullPath(content_path);\n \n   const std::string temp_path = Common::RootUserPath(Common::FROM_SESSION_ROOT) +\n-                                StringFromFormat("/tmp/%08x.app", m_addtitle_content_id);\n+                                StringFromFormat("/tmp/%08x.app", context.title_import.content_id);\n   File::CreateFullPath(temp_path);\n \n   {\n@@ -258,32 +261,33 @@ IPCCommandResult ES::AddContentFinish(const IOCtlVRequest& request)\n     return GetDefaultReply(ES_EIO);\n   }\n \n-  m_addtitle_content_id = 0xFFFFFFFF;\n+  context.title_import.content_id = 0xFFFFFFFF;\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddTitleFinish(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddTitleFinish(Context& context, const IOCtlVRequest& request)\n {\n-  if (!request.HasNumberOfValidVectors(0, 0) || !m_addtitle_tmd.IsValid())\n+  if (!request.HasNumberOfValidVectors(0, 0) || !context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n-  if (!WriteImportTMD(m_addtitle_tmd))\n+  if (!WriteImportTMD(context.title_import.tmd))\n     return GetDefaultReply(ES_EIO);\n \n-  if (!FinishImport(m_addtitle_tmd))\n+  if (!FinishImport(context.title_import.tmd))\n     return GetDefaultReply(FS_EIO);\n \n   INFO_LOG(IOS_ES, "IOCTL_ES_ADDTITLEFINISH");\n-  m_addtitle_tmd.SetBytes({});\n+  context.title_import.tmd.SetBytes({});\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddTitleCancel(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddTitleCancel(Context& context, const IOCtlVRequest& request)\n {\n-  if (!request.HasNumberOfValidVectors(0, 0) || !m_addtitle_tmd.IsValid())\n+  if (!request.HasNumberOfValidVectors(0, 0) || !context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n-  const IOS::ES::TMDReader original_tmd = IOS::ES::FindInstalledTMD(m_addtitle_tmd.GetTitleId());\n+  const IOS::ES::TMDReader original_tmd =\n+      IOS::ES::FindInstalledTMD(context.title_import.tmd.GetTitleId());\n   if (!original_tmd.IsValid())\n   {\n     // This should never happen unless someone messed with the installed TMD directly.\n@@ -294,7 +298,7 @@ IPCCommandResult ES::AddTitleCancel(const IOCtlVRequest& request)\n   if (!FinishImport(original_tmd))\n     return GetDefaultReply(FS_EIO);\n \n-  m_addtitle_tmd.SetBytes({});\n+  context.title_import.tmd.SetBytes({});\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n@@ -363,40 +367,40 @@ IPCCommandResult ES::DeleteTitleContent(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::ExportTitleInit(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportTitleInit(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 1) || request.in_vectors[0].size != 8)\n     return GetDefaultReply(ES_EINVAL);\n \n   // No concurrent title import/export is allowed.\n-  if (m_export_title_context.valid)\n+  if (context.title_export.valid)\n     return GetDefaultReply(ES_EINVAL);\n \n   const auto tmd = IOS::ES::FindInstalledTMD(Memory::Read_U64(request.in_vectors[0].address));\n   if (!tmd.IsValid())\n     return GetDefaultReply(FS_ENOENT);\n \n-  m_export_title_context.tmd = tmd;\n+  context.title_export.tmd = tmd;\n \n-  const auto ticket = DiscIO::FindSignedTicket(m_export_title_context.tmd.GetTitleId());\n+  const auto ticket = DiscIO::FindSignedTicket(context.title_export.tmd.GetTitleId());\n   if (!ticket.IsValid())\n     return GetDefaultReply(ES_NO_TICKET);\n-  if (ticket.GetTitleId() != m_export_title_context.tmd.GetTitleId())\n+  if (ticket.GetTitleId() != context.title_export.tmd.GetTitleId())\n     return GetDefaultReply(ES_EINVAL);\n \n-  m_export_title_context.title_key = ticket.GetTitleKey();\n+  context.title_export.title_key = ticket.GetTitleKey();\n \n-  const auto& raw_tmd = m_export_title_context.tmd.GetRawTMD();\n+  const auto& raw_tmd = context.title_export.tmd.GetRawTMD();\n   if (request.io_vectors[0].size != raw_tmd.size())\n     return GetDefaultReply(ES_EINVAL);\n \n   Memory::CopyToEmu(request.io_vectors[0].address, raw_tmd.data(), raw_tmd.size());\n \n-  m_export_title_context.valid = true;\n+  context.title_export.valid = true;\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::ExportContentBegin(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportContentBegin(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(2, 0) || request.in_vectors[0].size != 8 ||\n       request.in_vectors[1].size != 4)\n@@ -405,7 +409,7 @@ IPCCommandResult ES::ExportContentBegin(const IOCtlVRequest& request)\n   const u64 title_id = Memory::Read_U64(request.in_vectors[0].address);\n   const u32 content_id = Memory::Read_U32(request.in_vectors[1].address);\n \n-  if (!m_export_title_context.valid || m_export_title_context.tmd.GetTitleId() != title_id)\n+  if (!context.title_export.valid || context.title_export.tmd.GetTitleId() != title_id)\n   {\n     ERROR_LOG(IOS_ES, "Tried to use ExportContentBegin with an invalid title export context.");\n     return GetDefaultReply(ES_EINVAL);\n@@ -426,7 +430,7 @@ IPCCommandResult ES::ExportContentBegin(const IOCtlVRequest& request)\n   content->m_Data->Open();\n \n   u32 cid = 0;\n-  while (m_export_title_context.contents.find(cid) != m_export_title_context.contents.end())\n+  while (context.title_export.contents.find(cid) != context.title_export.contents.end())\n     cid++;\n \n   TitleExportContext::ExportContent content_export;\n@@ -434,12 +438,12 @@ IPCCommandResult ES::ExportContentBegin(const IOCtlVRequest& request)\n   content_export.iv[0] = (content->m_metadata.index >> 8) & 0xFF;\n   content_export.iv[1] = content->m_metadata.index & 0xFF;\n \n-  m_export_title_context.contents.emplace(cid, content_export);\n+  context.title_export.contents.emplace(cid, content_export);\n   // IOS returns a content ID which is passed to further content calls.\n   return GetDefaultReply(cid);\n }\n \n-IPCCommandResult ES::ExportContentData(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportContentData(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 1) || request.in_vectors[0].size != 4 ||\n       request.io_vectors[0].size == 0)\n@@ -450,8 +454,8 @@ IPCCommandResult ES::ExportContentData(const IOCtlVRequest& request)\n   const u32 content_id = Memory::Read_U32(request.in_vectors[0].address);\n   const u32 bytes_to_read = request.io_vectors[0].size;\n \n-  const auto iterator = m_export_title_context.contents.find(content_id);\n-  if (!m_export_title_context.valid || iterator == m_export_title_context.contents.end() ||\n+  const auto iterator = context.title_export.contents.find(content_id);\n+  if (!context.title_export.valid || iterator == context.title_export.contents.end() ||\n       iterator->second.content.m_position >= iterator->second.content.m_content.size)\n   {\n     return GetDefaultReply(ES_EINVAL);\n@@ -479,7 +483,7 @@ IPCCommandResult ES::ExportContentData(const IOCtlVRequest& request)\n   std::vector<u8> output(buffer.size());\n \n   mbedtls_aes_context aes_ctx;\n-  mbedtls_aes_setkey_enc(&aes_ctx, m_export_title_context.title_key.data(), 128);\n+  mbedtls_aes_setkey_enc(&aes_ctx, context.title_export.title_key.data(), 128);\n   const int ret = mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_ENCRYPT, buffer.size(),\n                                         iterator->second.iv.data(), buffer.data(), output.data());\n   if (ret != 0)\n@@ -494,15 +498,15 @@ IPCCommandResult ES::ExportContentData(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::ExportContentEnd(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportContentEnd(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0) || request.in_vectors[0].size != 4)\n     return GetDefaultReply(ES_EINVAL);\n \n   const u32 content_id = Memory::Read_U32(request.in_vectors[0].address);\n \n-  const auto iterator = m_export_title_context.contents.find(content_id);\n-  if (!m_export_title_context.valid || iterator == m_export_title_context.contents.end() ||\n+  const auto iterator = context.title_export.contents.find(content_id);\n+  if (!context.title_export.valid || iterator == context.title_export.contents.end() ||\n       iterator->second.content.m_position != iterator->second.content.m_content.size)\n   {\n     return GetDefaultReply(ES_EINVAL);\n@@ -513,16 +517,16 @@ IPCCommandResult ES::ExportContentEnd(const IOCtlVRequest& request)\n   const auto& content_loader = AccessContentDevice(iterator->second.content.m_title_id);\n   content_loader.GetContentByID(iterator->second.content.m_content.id)->m_Data->Close();\n \n-  m_export_title_context.contents.erase(iterator);\n+  context.title_export.contents.erase(iterator);\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::ExportTitleDone(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportTitleDone(Context& context, const IOCtlVRequest& request)\n {\n-  if (!m_export_title_context.valid)\n+  if (!context.title_export.valid)\n     return GetDefaultReply(ES_EINVAL);\n \n-  m_export_title_context.valid = false;\n+  context.title_export.valid = false;\n   return GetDefaultReply(IPC_SUCCESS);\n }\n }  // namespace Device\ndiff --git a/Source/Core/Core/IOS/FS/FileIO.cpp b/Source/Core/Core/IOS/FS/FileIO.cpp\nindex dbc2f020..4c11d82 100644\n--- a/Source/Core/Core/IOS/FS/FileIO.cpp\n+++ b/Source/Core/Core/IOS/FS/FileIO.cpp\n@@ -76,7 +76,7 @@ FileIO::FileIO(u32 device_id, const std::string& device_name)\n {\n }\n \n-void FileIO::Close()\n+ReturnCode FileIO::Close(u32 fd)\n {\n   INFO_LOG(IOS_FILEIO, "FileIO: Close %s (DeviceID=%08x)", m_name.c_str(), m_device_id);\n   m_Mode = 0;\n@@ -86,6 +86,7 @@ void FileIO::Close()\n   m_file.reset();\n \n   m_is_active = false;\n+  return IPC_SUCCESS;\n }\n \n ReturnCode FileIO::Open(const OpenRequest& request)\ndiff --git a/Source/Core/Core/IOS/FS/FileIO.h b/Source/Core/Core/IOS/FS/FileIO.h\nindex 0e5698c..f341208 100644\n--- a/Source/Core/Core/IOS/FS/FileIO.h\n+++ b/Source/Core/Core/IOS/FS/FileIO.h\n@@ -32,7 +32,7 @@ class FileIO : public Device\n public:\n   FileIO(u32 device_id, const std::string& device_name);\n \n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   ReturnCode Open(const OpenRequest& request) override;\n   IPCCommandResult Seek(const SeekRequest& request) override;\n   IPCCommandResult Read(const ReadWriteRequest& request) override;\ndiff --git a/Source/Core/Core/IOS/IPC.cpp b/Source/Core/Core/IOS/IPC.cpp\nindex 00d2087..2906f20 100644\n--- a/Source/Core/Core/IOS/IPC.cpp\n+++ b/Source/Core/Core/IOS/IPC.cpp\n@@ -75,9 +75,7 @@ static std::mutex s_device_map_mutex;\n \n // STATE_TO_SAVE\n constexpr u8 IPC_MAX_FDS = 0x18;\n-constexpr u8 ES_MAX_COUNT = 3;\n static std::shared_ptr<Device::Device> s_fdmap[IPC_MAX_FDS];\n-static std::shared_ptr<Device::ES> s_es_handles[ES_MAX_COUNT];\n \n using IPCMsgQueue = std::deque<u32>;\n static IPCMsgQueue s_request_queue;  // ppc -> arm\n@@ -595,11 +593,7 @@ static void AddStaticDevices()\n   AddDevice<Device::STMImmediate>("/dev/stm/immediate");\n   AddDevice<Device::STMEventHook>("/dev/stm/eventhook");\n   AddDevice<Device::FS>("/dev/fs");\n-\n-  // IOS allows three ES devices at a time\n-  for (auto& es_device : s_es_handles)\n-    es_device = AddDevice<Device::ES>("/dev/es");\n-\n+  AddDevice<Device::ES>("/dev/es");\n   AddDevice<Device::DI>("/dev/di");\n   AddDevice<Device::NetKDRequest>("/dev/net/kd/request");\n   AddDevice<Device::NetKDTime>("/dev/net/kd/time");\n@@ -643,7 +637,7 @@ static void Reset()\n   {\n     if (!device)\n       continue;\n-    device->Close();\n+    device->Close(0);\n     device.reset();\n   }\n \n@@ -701,7 +695,6 @@ bool Reload(const u64 ios_title_id)\n \n   AddStaticDevices();\n \n-  Device::ES::Init();\n   return true;\n }\n \n@@ -855,13 +848,6 @@ void DoState(PointerWrap& p)\n         }\n       }\n     }\n-\n-    for (auto& es_device : s_es_handles)\n-    {\n-      const u32 handle_id = es_device->GetDeviceID();\n-      p.Do(handle_id);\n-      es_device = std::static_pointer_cast<Device::ES>(AccessDeviceByID(handle_id));\n-    }\n   }\n   else\n   {\n@@ -884,24 +870,11 @@ void DoState(PointerWrap& p)\n         }\n       }\n     }\n-\n-    for (const auto& es_device : s_es_handles)\n-    {\n-      const u32 handle_id = es_device->GetDeviceID();\n-      p.Do(handle_id);\n-    }\n   }\n }\n \n-static std::shared_ptr<Device::Device> GetUnusedESDevice()\n-{\n-  const auto iterator = std::find_if(std::begin(s_es_handles), std::end(s_es_handles),\n-                                     [](const auto& es_device) { return !es_device->IsOpened(); });\n-  return (iterator != std::end(s_es_handles)) ? *iterator : nullptr;\n-}\n-\n // Returns the FD for the newly opened device (on success) or an error code.\n-static s32 OpenDevice(const OpenRequest& request)\n+static s32 OpenDevice(OpenRequest& request)\n {\n   const s32 new_fd = GetFreeDeviceID();\n   INFO_LOG(IOS, "Opening %s (mode %d, fd %d)", request.path.c_str(), request.flags, new_fd);\n@@ -910,15 +883,10 @@ static s32 OpenDevice(const OpenRequest& request)\n     ERROR_LOG(IOS, "Couldn\'t get a free fd, too many open files");\n     return FS_EFDEXHAUSTED;\n   }\n+  request.fd = new_fd;\n \n   std::shared_ptr<Device::Device> device;\n-  if (request.path == "/dev/es")\n-  {\n-    device = GetUnusedESDevice();\n-    if (!device)\n-      return ES_FD_EXHAUSTED;\n-  }\n-  else if (request.path.find("/dev/usb/oh0/") == 0 && !GetDeviceByName(request.path))\n+  if (request.path.find("/dev/usb/oh0/") == 0 && !GetDeviceByName(request.path))\n   {\n     device = std::make_shared<Device::OH0Device>(new_fd, request.path);\n   }\n@@ -961,8 +929,7 @@ static IPCCommandResult HandleCommand(const Request& request)\n   {\n   case IPC_CMD_CLOSE:\n     s_fdmap[request.fd].reset();\n-    device->Close();\n-    return Device::Device::GetDefaultReply(IPC_SUCCESS);\n+    return Device::Device::GetDefaultReply(device->Close(request.fd));\n   case IPC_CMD_READ:\n     return device->Read(ReadWriteRequest{request.address});\n   case IPC_CMD_WRITE:\ndiff --git a/Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp b/Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp\nindex 96a2d48..4987fae 100644\n--- a/Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp\n+++ b/Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp\n@@ -83,13 +83,13 @@ ReturnCode SDIOSlot0::Open(const OpenRequest& request)\n   return IPC_SUCCESS;\n }\n \n-void SDIOSlot0::Close()\n+ReturnCode SDIOSlot0::Close(u32 fd)\n {\n   m_Card.Close();\n   m_BlockLength = 0;\n   m_BusWidth = 0;\n \n-  m_is_active = false;\n+  return Device::Close(fd);\n }\n \n IPCCommandResult SDIOSlot0::IOCtl(const IOCtlRequest& request)\ndiff --git a/Source/Core/Core/IOS/SDIO/SDIOSlot0.h b/Source/Core/Core/IOS/SDIO/SDIOSlot0.h\nindex 6fd08a9..116625f 100644\n--- a/Source/Core/Core/IOS/SDIO/SDIOSlot0.h\n+++ b/Source/Core/Core/IOS/SDIO/SDIOSlot0.h\n@@ -31,7 +31,7 @@ class SDIOSlot0 : public Device\n   void DoState(PointerWrap& p) override;\n \n   ReturnCode Open(const OpenRequest& request) override;\n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtl(const IOCtlRequest& request) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n \ndiff --git a/Source/Core/Core/IOS/STM/STM.cpp b/Source/Core/Core/IOS/STM/STM.cpp\nindex 1330c42..aece7e3 100644\n--- a/Source/Core/Core/IOS/STM/STM.cpp\n+++ b/Source/Core/Core/IOS/STM/STM.cpp\n@@ -67,10 +67,10 @@ IPCCommandResult STMImmediate::IOCtl(const IOCtlRequest& request)\n   return GetDefaultReply(return_value);\n }\n \n-void STMEventHook::Close()\n+ReturnCode STMEventHook::Close(u32 fd)\n {\n   s_event_hook_request.reset();\n-  m_is_active = false;\n+  return Device::Close(fd);\n }\n \n IPCCommandResult STMEventHook::IOCtl(const IOCtlRequest& request)\ndiff --git a/Source/Core/Core/IOS/STM/STM.h b/Source/Core/Core/IOS/STM/STM.h\nindex 1a2f534..6721e3c 100644\n--- a/Source/Core/Core/IOS/STM/STM.h\n+++ b/Source/Core/Core/IOS/STM/STM.h\n@@ -55,7 +55,7 @@ class STMEventHook final : public Device\n {\n public:\n   STMEventHook(u32 device_id, const std::string& device_name) : Device(device_id, device_name) {}\n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtl(const IOCtlRequest& request) override;\n   void DoState(PointerWrap& p) override;\n \ndiff --git a/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp b/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp\nindex 901aa11..bf6c1c1 100644\n--- a/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp\n+++ b/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp\n@@ -147,7 +147,7 @@ bool BluetoothEmu::RemoteDisconnect(u16 _connectionHandle)\n   return SendEventDisconnect(_connectionHandle, 0x13);\n }\n \n-void BluetoothEmu::Close()\n+ReturnCode BluetoothEmu::Close(u32 fd)\n {\n   // Clean up state\n   m_ScanEnable = 0;\n@@ -156,7 +156,7 @@ void BluetoothEmu::Close()\n   m_HCIEndpoint.reset();\n   m_ACLEndpoint.reset();\n \n-  m_is_active = false;\n+  return Device::Close(fd);\n }\n \n IPCCommandResult BluetoothEmu::IOCtlV(const IOCtlVRequest& request)\ndiff --git a/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h b/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h\nindex 45e42ef..efb60cf 100644\n--- a/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h\n+++ b/Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h\n@@ -49,7 +49,7 @@ class BluetoothEmu final : public BluetoothBase\n \n   virtual ~BluetoothEmu();\n \n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n \n   void Update() override;\ndiff --git a/Source/Core/Core/IOS/USB/Bluetooth/BTReal.cpp b/Source/Core/Core/IOS/USB/Bluetooth/BTReal.cpp\nindex cba2a3f..2563315 100644\n--- a/Source/Core/Core/IOS/USB/Bluetooth/BTReal.cpp\n+++ b/Source/Core/Core/IOS/USB/Bluetooth/BTReal.cpp\n@@ -149,7 +149,7 @@ ReturnCode BluetoothReal::Open(const OpenRequest& request)\n   return IPC_SUCCESS;\n }\n \n-void BluetoothReal::Close()\n+ReturnCode BluetoothReal::Close(u32 fd)\n {\n   if (m_handle)\n   {\n@@ -159,7 +159,7 @@ void BluetoothReal::Close()\n     m_handle = nullptr;\n   }\n \n-  m_is_active = false;\n+  return Device::Close(fd);\n }\n \n IPCCommandResult BluetoothReal::IOCtlV(const IOCtlVRequest& request)\ndiff --git a/Source/Core/Core/IOS/USB/Bluetooth/BTReal.h b/Source/Core/Core/IOS/USB/Bluetooth/BTReal.h\nindex dc16799..3acc462 100644\n--- a/Source/Core/Core/IOS/USB/Bluetooth/BTReal.h\n+++ b/Source/Core/Core/IOS/USB/Bluetooth/BTReal.h\n@@ -52,7 +52,7 @@ class BluetoothReal final : public BluetoothBase\n   ~BluetoothReal() override;\n \n   ReturnCode Open(const OpenRequest& request) override;\n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n \n   void DoState(PointerWrap& p) override;\ndiff --git a/Source/Core/Core/IOS/USB/OH0/OH0Device.cpp b/Source/Core/Core/IOS/USB/OH0/OH0Device.cpp\nindex 61bbd44..03b3e7d 100644\n--- a/Source/Core/Core/IOS/USB/OH0/OH0Device.cpp\n+++ b/Source/Core/Core/IOS/USB/OH0/OH0Device.cpp\n@@ -68,9 +68,10 @@ ReturnCode OH0Device::Open(const OpenRequest& request)\n   return return_code;\n }\n \n-void OH0Device::Close()\n+ReturnCode OH0Device::Close(u32 fd)\n {\n   m_oh0->DeviceClose(m_device_id);\n+  return Device::Close(fd);\n }\n \n IPCCommandResult OH0Device::IOCtl(const IOCtlRequest& request)\ndiff --git a/Source/Core/Core/IOS/USB/OH0/OH0Device.h b/Source/Core/Core/IOS/USB/OH0/OH0Device.h\nindex 239622d..c66ccc4 100644\n--- a/Source/Core/Core/IOS/USB/OH0/OH0Device.h\n+++ b/Source/Core/Core/IOS/USB/OH0/OH0Device.h\n@@ -25,7 +25,7 @@ class OH0Device final : public Device\n   OH0Device(u32 device_id, const std::string& device_name);\n \n   ReturnCode Open(const OpenRequest& request) override;\n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtl(const IOCtlRequest& request) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n   void DoState(PointerWrap& p) override;\n'}, 'revision': 'f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'project': '', 'codebase': '', 'repository': '', 'created_at': 1493325415, 'ssid': 3280}], 'parent_relationship': None, 'complete': False, 'complete_at': None, 'results': -1}, 'builder': {'tags': [], 'description': None, 'masterids': [1], 'name': 'pr-win-dbg-x64', 'builderid': 7}, 'buildrequest': {'priority': 0, 'claimed_by_masterid': 1, 'waited_for': False, 'submitted_at': 1493325414, 'buildrequestid': 20651, 'claimed': True, 'builderid': 7, 'complete_at': None, 'buildsetid': 5935, 'complete': False, 'results': -1, 'claimed_at': 1493325618}, 'number': 1060, 'complete_at': None, 'state_string': 'starting', 'workerid': 4, 'builderid': 7, 'complete': False, 'results': None, 'properties': {'scheduler': ['pr', 'Scheduler'], 'repository': ['', 'Build'], 'buildnumber': [1060, 'Build'], 'buildername': ['pr-win-dbg-x64', 'Builder'], 'repo': ['dolphin-emu/dolphin', 'try build'], 'revision': ['f2035384e5e03ec86abefeb7ab24fa1fc3dd8f39', 'Build'], 'branch': [None, 'Build'], 'pr_id': [5333, 'try build'], 'branchname': ['pr-5333', 'try build'], 'codebase': ['', 'Build'], 'project': ['', 'Build'], 'shortrev': ['4213ea', 'try build'], 'headrev': ['4213ea1bb4e92bbf3a4824be0833aeb4c3678575', 'try build']}}}
2017-04-27T20:40:18.284584	{'source': 'webserver', 'bb_type': 'finished', 'type': 'raw_bb_hook', 'raw': {'started_at': 1493325513, 'url': 'https://buildbot.dolphin-emu.org/#builders/7/builds/1059', 'buildid': 12532, 'masterid': 1, 'buildrequestid': 20636, 'buildset': {'parent_buildid': None, 'external_idstring': '5333-1137b5', 'bsid': 5933, 'submitted_at': 1493325324, 'reason': "'try' job by user Central (on behalf of: leoetlino)", 'sourcestamps': [{'branch': None, 'patch': {'level': 1, 'patchid': 2962, 'subdir': '', 'author': 'Central (on behalf of: leoetlino)', 'comment': 'Auto build for PR #5333 (1137b57947a6f9f5fe5afbcbc4138f77bed96042).', 'body': 'From 1137b57947a6f9f5fe5afbcbc4138f77bed96042 Mon Sep 17 00:00:00 2001\nFrom: =?UTF-8?q?L=C3=A9o=20Lam?= <leo@innovatetechnologi.es>\nDate: Thu, 27 Apr 2017 21:22:04 +0200\nSubject: [PATCH] IOS/ES: Handle contexts properly\n\nThis changes the IOS code to handle ES contexts inside of ES, instead\nof leaking out implementation details into the IPC request dispatcher.\n\nThe intent is to clarify what\'s shared between every single ES context,\nand what is specific to an ES context. (Not much.) This should reduce\nthe number of static members in the ES class.\n\nThe other changes are there just because we now keep track of the\nIPC FD inside of ES.\n\nFuture plans:\n\n* After the WAD direct launch hack is dropped, the title context\n  will be made a class member.\n\n* Have proper function prototypes, instead of having every single one\n  of them take ioctlv requests. This will allow reusing IOS code in\n  other parts of the Dolphin codebase without having to construct\n  ioctlv requests.\n---\n Source/Core/Core/IOS/Device.cpp               |   3 +-\n Source/Core/Core/IOS/Device.h                 |   2 +-\n Source/Core/Core/IOS/DeviceStub.cpp           |   6 --\n Source/Core/Core/IOS/DeviceStub.h             |   1 -\n Source/Core/Core/IOS/ES/ES.cpp                | 117 ++++++++++++++---------\n Source/Core/Core/IOS/ES/ES.h                  | 104 ++++++++++++---------\n Source/Core/Core/IOS/ES/Identity.cpp          |   4 +-\n Source/Core/Core/IOS/ES/TitleContents.cpp     |  10 +-\n Source/Core/Core/IOS/ES/TitleManagement.cpp   | 128 +++++++++++++-------------\n Source/Core/Core/IOS/FS/FileIO.cpp            |   3 +-\n Source/Core/Core/IOS/FS/FileIO.h              |   2 +-\n Source/Core/Core/IOS/IPC.cpp                  |  45 ++-------\n Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp       |   4 +-\n Source/Core/Core/IOS/SDIO/SDIOSlot0.h         |   2 +-\n Source/Core/Core/IOS/STM/STM.cpp              |   4 +-\n Source/Core/Core/IOS/STM/STM.h                |   2 +-\n Source/Core/Core/IOS/USB/Bluetooth/BTEmu.cpp  |   4 +-\n Source/Core/Core/IOS/USB/Bluetooth/BTEmu.h    |   2 +-\n Source/Core/Core/IOS/USB/Bluetooth/BTReal.cpp |   4 +-\n Source/Core/Core/IOS/USB/Bluetooth/BTReal.h   |   2 +-\n Source/Core/Core/IOS/USB/OH0/OH0Device.cpp    |   3 +-\n Source/Core/Core/IOS/USB/OH0/OH0Device.h      |   2 +-\n 22 files changed, 233 insertions(+), 221 deletions(-)\n\ndiff --git a/Source/Core/Core/IOS/Device.cpp b/Source/Core/Core/IOS/Device.cpp\nindex 5d38c7e..e407d54 100644\n--- a/Source/Core/Core/IOS/Device.cpp\n+++ b/Source/Core/Core/IOS/Device.cpp\n@@ -154,9 +154,10 @@ ReturnCode Device::Open(const OpenRequest& request)\n   return IPC_SUCCESS;\n }\n \n-void Device::Close()\n+ReturnCode Device::Close(u32 fd)\n {\n   m_is_active = false;\n+  return IPC_SUCCESS;\n }\n \n IPCCommandResult Device::Unsupported(const Request& request)\ndiff --git a/Source/Core/Core/IOS/Device.h b/Source/Core/Core/IOS/Device.h\nindex 91d2dbb..c8dd0cc 100644\n--- a/Source/Core/Core/IOS/Device.h\n+++ b/Source/Core/Core/IOS/Device.h\n@@ -185,7 +185,7 @@ class Device\n   // Replies to Open and Close requests are sent by the IPC request handler (HandleCommand),\n   // not by the devices themselves.\n   virtual ReturnCode Open(const OpenRequest& request);\n-  virtual void Close();\n+  virtual ReturnCode Close(u32 fd);\n   virtual IPCCommandResult Seek(const SeekRequest& seek) { return Unsupported(seek); }\n   virtual IPCCommandResult Read(const ReadWriteRequest& read) { return Unsupported(read); }\n   virtual IPCCommandResult Write(const ReadWriteRequest& write) { return Unsupported(write); }\ndiff --git a/Source/Core/Core/IOS/DeviceStub.cpp b/Source/Core/Core/IOS/DeviceStub.cpp\nindex cdd74ac..2502c84 100644\n--- a/Source/Core/Core/IOS/DeviceStub.cpp\n+++ b/Source/Core/Core/IOS/DeviceStub.cpp\n@@ -22,12 +22,6 @@ ReturnCode Stub::Open(const OpenRequest& request)\n   return IPC_SUCCESS;\n }\n \n-void Stub::Close()\n-{\n-  WARN_LOG(IOS, "%s faking Close()", m_name.c_str());\n-  m_is_active = false;\n-}\n-\n IPCCommandResult Stub::IOCtl(const IOCtlRequest& request)\n {\n   WARN_LOG(IOS, "%s faking IOCtl()", m_name.c_str());\ndiff --git a/Source/Core/Core/IOS/DeviceStub.h b/Source/Core/Core/IOS/DeviceStub.h\nindex 6b7298c..b6b60b0 100644\n--- a/Source/Core/Core/IOS/DeviceStub.h\n+++ b/Source/Core/Core/IOS/DeviceStub.h\n@@ -22,7 +22,6 @@ class Stub final : public Device\n   Stub(u32 device_id, const std::string& device_name);\n \n   ReturnCode Open(const OpenRequest& request) override;\n-  void Close() override;\n   IPCCommandResult IOCtl(const IOCtlRequest& request) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n };\ndiff --git a/Source/Core/Core/IOS/ES/ES.cpp b/Source/Core/Core/IOS/ES/ES.cpp\nindex 29ea0de..acd0873 100644\n--- a/Source/Core/Core/IOS/ES/ES.cpp\n+++ b/Source/Core/Core/IOS/ES/ES.cpp\n@@ -4,6 +4,7 @@\n \n #include "Core/IOS/ES/ES.h"\n \n+#include <algorithm>\n #include <cinttypes>\n #include <cstdio>\n #include <memory>\n@@ -27,17 +28,13 @@ namespace HLE\n {\n namespace Device\n {\n-// Shared across all ES instances.\n+// TODO: drop this and convert the title context into a member once the WAD launch hack is gone.\n static std::string s_content_file;\n static TitleContext s_title_context;\n \n // Title to launch after IOS has been reset and reloaded (similar to /sys/launch.sys).\n static u64 s_title_to_launch;\n \n-ES::ES(u32 device_id, const std::string& device_name) : Device(device_id, device_name)\n-{\n-}\n-\n static void FinishAllStaleImports()\n {\n   const std::vector<u64> titles = IOS::ES::GetTitleImports();\n@@ -58,7 +55,7 @@ static void FinishAllStaleImports()\n   File::CreateDir(import_dir);\n }\n \n-void ES::Init()\n+ES::ES(u32 device_id, const std::string& device_name) : Device(device_id, device_name)\n {\n   FinishAllStaleImports();\n \n@@ -182,14 +179,14 @@ static ReturnCode CheckIsAllowedToSetUID(const u32 caller_uid)\n   return caller_uid == system_menu_uid ? IPC_SUCCESS : ES_EINVAL;\n }\n \n-IPCCommandResult ES::SetUID(const IOCtlVRequest& request)\n+IPCCommandResult ES::SetUID(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0) || request.in_vectors[0].size != 8)\n     return GetDefaultReply(ES_EINVAL);\n \n   const u64 title_id = Memory::Read_U64(request.in_vectors[0].address);\n \n-  const s32 ret = CheckIsAllowedToSetUID(m_caller_uid);\n+  const s32 ret = CheckIsAllowedToSetUID(uid);\n   if (ret < 0)\n   {\n     ERROR_LOG(IOS_ES, "SetUID: Permission check failed with error %d", ret);\n@@ -279,6 +276,24 @@ bool ES::LaunchPPCTitle(u64 title_id, bool skip_reload)\n   return BootstrapPPC(content_loader);\n }\n \n+void ES::Context::DoState(PointerWrap& p)\n+{\n+  p.Do(uid);\n+  p.Do(gid);\n+\n+  title_import.tmd.DoState(p);\n+  p.Do(title_import.content_id);\n+  p.Do(title_import.content_buffer);\n+\n+  p.Do(title_export.valid);\n+  title_export.tmd.DoState(p);\n+  p.Do(title_export.title_key);\n+  p.Do(title_export.contents);\n+\n+  p.Do(active);\n+  p.Do(ipc_fd);\n+}\n+\n void ES::DoState(PointerWrap& p)\n {\n   Device::DoState(p);\n@@ -286,17 +301,8 @@ void ES::DoState(PointerWrap& p)\n   p.Do(m_AccessIdentID);\n   s_title_context.DoState(p);\n \n-  m_addtitle_tmd.DoState(p);\n-  p.Do(m_addtitle_content_id);\n-  p.Do(m_addtitle_content_buffer);\n-\n-  p.Do(m_caller_uid);\n-  p.Do(m_caller_gid);\n-\n-  p.Do(m_export_title_context.valid);\n-  m_export_title_context.tmd.DoState(p);\n-  p.Do(m_export_title_context.title_key);\n-  p.Do(m_export_title_context.contents);\n+  for (auto& context : m_contexts)\n+    context.DoState(p);\n \n   u32 Count = (u32)(m_ContentAccessMap.size());\n   p.Do(Count);\n@@ -322,16 +328,37 @@ void ES::DoState(PointerWrap& p)\n   }\n }\n \n+std::array<ES::Context, 3>::iterator ES::FindActiveContext(u32 fd)\n+{\n+  auto context = std::find_if(m_contexts.begin(), m_contexts.end(),\n+                              [fd](const auto& c) { return c.ipc_fd == fd && c.active; });\n+  return context;\n+}\n+\n ReturnCode ES::Open(const OpenRequest& request)\n {\n-  m_caller_uid = request.uid;\n-  m_caller_gid = request.gid;\n+  auto context =\n+      std::find_if(m_contexts.begin(), m_contexts.end(), [](const auto& c) { return !c.active; });\n+  if (context == m_contexts.end())\n+    return ES_FD_EXHAUSTED;\n+\n+  context->active = true;\n+  context->uid = request.uid;\n+  context->gid = request.gid;\n+  context->ipc_fd = request.fd;\n   return Device::Open(request);\n }\n \n-void ES::Close()\n+ReturnCode ES::Close(u32 fd)\n {\n-  // XXX: does IOS really clear the content access map here?\n+  auto context = FindActiveContext(fd);\n+  if (context == m_contexts.end())\n+    return ES_EINVAL;\n+\n+  context->active = false;\n+  context->ipc_fd = -1;\n+\n+  // FIXME: IOS doesn\'t clear the content access map here.\n   m_ContentAccessMap.clear();\n   m_AccessIdentID = 0;\n \n@@ -339,48 +366,52 @@ void ES::Close()\n   m_is_active = false;\n   // clear the NAND content cache to make sure nothing remains open.\n   DiscIO::CNANDContentManager::Access().ClearCache();\n+  return IPC_SUCCESS;\n }\n \n IPCCommandResult ES::IOCtlV(const IOCtlVRequest& request)\n {\n   DEBUG_LOG(IOS_ES, "%s (0x%x)", GetDeviceName().c_str(), request.request);\n+  auto context = FindActiveContext(request.fd);\n+  if (context == m_contexts.end())\n+    return GetDefaultReply(ES_EINVAL);\n \n   switch (request.request)\n   {\n   case IOCTL_ES_ADDTICKET:\n     return AddTicket(request);\n   case IOCTL_ES_ADDTMD:\n-    return AddTMD(request);\n+    return AddTMD(*context, request);\n   case IOCTL_ES_ADDTITLESTART:\n-    return AddTitleStart(request);\n+    return AddTitleStart(*context, request);\n   case IOCTL_ES_ADDCONTENTSTART:\n-    return AddContentStart(request);\n+    return AddContentStart(*context, request);\n   case IOCTL_ES_ADDCONTENTDATA:\n-    return AddContentData(request);\n+    return AddContentData(*context, request);\n   case IOCTL_ES_ADDCONTENTFINISH:\n-    return AddContentFinish(request);\n+    return AddContentFinish(*context, request);\n   case IOCTL_ES_ADDTITLEFINISH:\n-    return AddTitleFinish(request);\n+    return AddTitleFinish(*context, request);\n   case IOCTL_ES_ADDTITLECANCEL:\n-    return AddTitleCancel(request);\n+    return AddTitleCancel(*context, request);\n   case IOCTL_ES_GETDEVICEID:\n     return GetConsoleID(request);\n   case IOCTL_ES_OPENTITLECONTENT:\n-    return OpenTitleContent(request);\n+    return OpenTitleContent(context->uid, request);\n   case IOCTL_ES_OPENCONTENT:\n-    return OpenContent(request);\n+    return OpenContent(context->uid, request);\n   case IOCTL_ES_READCONTENT:\n-    return ReadContent(request);\n+    return ReadContent(context->uid, request);\n   case IOCTL_ES_CLOSECONTENT:\n-    return CloseContent(request);\n+    return CloseContent(context->uid, request);\n   case IOCTL_ES_SEEKCONTENT:\n-    return SeekContent(request);\n+    return SeekContent(context->uid, request);\n   case IOCTL_ES_GETTITLEDIR:\n     return GetTitleDirectory(request);\n   case IOCTL_ES_GETTITLEID:\n     return GetTitleID(request);\n   case IOCTL_ES_SETUID:\n-    return SetUID(request);\n+    return SetUID(context->uid, request);\n   case IOCTL_ES_DIVERIFY:\n     return DIVerify(request);\n \n@@ -441,23 +472,23 @@ IPCCommandResult ES::IOCtlV(const IOCtlVRequest& request)\n   case IOCTL_ES_GETSTOREDTMD:\n     return GetStoredTMD(request);\n   case IOCTL_ES_ENCRYPT:\n-    return Encrypt(request);\n+    return Encrypt(context->uid, request);\n   case IOCTL_ES_DECRYPT:\n-    return Decrypt(request);\n+    return Decrypt(context->uid, request);\n   case IOCTL_ES_LAUNCH:\n     return Launch(request);\n   case IOCTL_ES_LAUNCHBC:\n     return LaunchBC(request);\n   case IOCTL_ES_EXPORTTITLEINIT:\n-    return ExportTitleInit(request);\n+    return ExportTitleInit(*context, request);\n   case IOCTL_ES_EXPORTCONTENTBEGIN:\n-    return ExportContentBegin(request);\n+    return ExportContentBegin(*context, request);\n   case IOCTL_ES_EXPORTCONTENTDATA:\n-    return ExportContentData(request);\n+    return ExportContentData(*context, request);\n   case IOCTL_ES_EXPORTCONTENTEND:\n-    return ExportContentEnd(request);\n+    return ExportContentEnd(*context, request);\n   case IOCTL_ES_EXPORTTITLEDONE:\n-    return ExportTitleDone(request);\n+    return ExportTitleDone(*context, request);\n   case IOCTL_ES_CHECKKOREAREGION:\n     return CheckKoreaRegion(request);\n   case IOCTL_ES_GETDEVICECERT:\ndiff --git a/Source/Core/Core/IOS/ES/ES.h b/Source/Core/Core/IOS/ES/ES.h\nindex e7cb5c6..3c769e4 100644\n--- a/Source/Core/Core/IOS/ES/ES.h\n+++ b/Source/Core/Core/IOS/ES/ES.h\n@@ -45,9 +45,6 @@ class ES final : public Device\n public:\n   ES(u32 device_id, const std::string& device_name);\n \n-  // Called after an IOS reload.\n-  static void Init();\n-\n   static s32 DIVerify(const IOS::ES::TMDReader& tmd, const IOS::ES::TicketReader& ticket);\n   static void LoadWAD(const std::string& _rContentFile);\n   static bool LaunchTitle(u64 title_id, bool skip_reload = false);\n@@ -58,7 +55,7 @@ class ES final : public Device\n   void DoState(PointerWrap& p) override;\n \n   ReturnCode Open(const OpenRequest& request) override;\n-  void Close() override;\n+  ReturnCode Close(u32 fd) override;\n   IPCCommandResult IOCtlV(const IOCtlVRequest& request) override;\n \n private:\n@@ -155,20 +152,55 @@ class ES final : public Device\n     u8 padding[0x3c];\n   };\n \n+  struct TitleImportContext\n+  {\n+    IOS::ES::TMDReader tmd;\n+    u32 content_id = 0xFFFFFFFF;\n+    std::vector<u8> content_buffer;\n+  };\n+\n+  // TODO: merge this with TitleImportContext. Also reuse the global content table.\n+  struct TitleExportContext\n+  {\n+    struct ExportContent\n+    {\n+      OpenedContent content;\n+      std::array<u8, 16> iv{};\n+    };\n+\n+    bool valid = false;\n+    IOS::ES::TMDReader tmd;\n+    std::vector<u8> title_key;\n+    std::map<u32, ExportContent> contents;\n+  };\n+\n+  struct Context\n+  {\n+    void DoState(PointerWrap& p);\n+\n+    u16 gid = 0;\n+    u32 uid = 0;\n+    TitleImportContext title_import;\n+    TitleExportContext title_export;\n+    bool active = false;\n+    // We use this to associate an IPC fd with an ES context.\n+    u32 ipc_fd = -1;\n+  };\n+\n   // Title management\n   IPCCommandResult AddTicket(const IOCtlVRequest& request);\n-  IPCCommandResult AddTMD(const IOCtlVRequest& request);\n-  IPCCommandResult AddTitleStart(const IOCtlVRequest& request);\n-  IPCCommandResult AddContentStart(const IOCtlVRequest& request);\n-  IPCCommandResult AddContentData(const IOCtlVRequest& request);\n-  IPCCommandResult AddContentFinish(const IOCtlVRequest& request);\n-  IPCCommandResult AddTitleFinish(const IOCtlVRequest& request);\n-  IPCCommandResult AddTitleCancel(const IOCtlVRequest& request);\n-  IPCCommandResult ExportTitleInit(const IOCtlVRequest& request);\n-  IPCCommandResult ExportContentBegin(const IOCtlVRequest& request);\n-  IPCCommandResult ExportContentData(const IOCtlVRequest& request);\n-  IPCCommandResult ExportContentEnd(const IOCtlVRequest& request);\n-  IPCCommandResult ExportTitleDone(const IOCtlVRequest& request);\n+  IPCCommandResult AddTMD(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddTitleStart(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddContentStart(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddContentData(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddContentFinish(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddTitleFinish(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult AddTitleCancel(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportTitleInit(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportContentBegin(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportContentData(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportContentEnd(Context& context, const IOCtlVRequest& request);\n+  IPCCommandResult ExportTitleDone(Context& context, const IOCtlVRequest& request);\n   IPCCommandResult DeleteTitle(const IOCtlVRequest& request);\n   IPCCommandResult DeleteTicket(const IOCtlVRequest& request);\n   IPCCommandResult DeleteTitleContent(const IOCtlVRequest& request);\n@@ -178,11 +210,11 @@ class ES final : public Device\n   IPCCommandResult GetDeviceCertificate(const IOCtlVRequest& request);\n   IPCCommandResult CheckKoreaRegion(const IOCtlVRequest& request);\n   IPCCommandResult Sign(const IOCtlVRequest& request);\n-  IPCCommandResult Encrypt(const IOCtlVRequest& request);\n-  IPCCommandResult Decrypt(const IOCtlVRequest& request);\n+  IPCCommandResult Encrypt(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult Decrypt(u32 uid, const IOCtlVRequest& request);\n \n   // Misc\n-  IPCCommandResult SetUID(const IOCtlVRequest& request);\n+  IPCCommandResult SetUID(u32 uid, const IOCtlVRequest& request);\n   IPCCommandResult GetTitleDirectory(const IOCtlVRequest& request);\n   IPCCommandResult GetTitleID(const IOCtlVRequest& request);\n   IPCCommandResult GetConsumption(const IOCtlVRequest& request);\n@@ -191,11 +223,11 @@ class ES final : public Device\n   IPCCommandResult DIVerify(const IOCtlVRequest& request);\n \n   // Title contents\n-  IPCCommandResult OpenTitleContent(const IOCtlVRequest& request);\n-  IPCCommandResult OpenContent(const IOCtlVRequest& request);\n-  IPCCommandResult ReadContent(const IOCtlVRequest& request);\n-  IPCCommandResult CloseContent(const IOCtlVRequest& request);\n-  IPCCommandResult SeekContent(const IOCtlVRequest& request);\n+  IPCCommandResult OpenTitleContent(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult OpenContent(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult ReadContent(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult CloseContent(u32 uid, const IOCtlVRequest& request);\n+  IPCCommandResult SeekContent(u32 uid, const IOCtlVRequest& request);\n \n   // Title information\n   IPCCommandResult GetTitleCount(const std::vector<u64>& titles, const IOCtlVRequest& request);\n@@ -228,6 +260,8 @@ class ES final : public Device\n   IPCCommandResult DIGetTMDSize(const IOCtlVRequest& request);\n   IPCCommandResult DIGetTMD(const IOCtlVRequest& request);\n \n+  std::array<Context, 3>::iterator FindActiveContext(u32 fd);\n+\n   static bool LaunchIOS(u64 ios_title_id);\n   static bool LaunchPPCTitle(u64 title_id, bool skip_reload);\n   static TitleContext& GetTitleContext();\n@@ -241,27 +275,7 @@ class ES final : public Device\n \n   u32 m_AccessIdentID = 0;\n \n-  // For title installation (ioctls IOCTL_ES_ADDTITLE*).\n-  IOS::ES::TMDReader m_addtitle_tmd;\n-  u32 m_addtitle_content_id = 0xFFFFFFFF;\n-  std::vector<u8> m_addtitle_content_buffer;\n-\n-  u32 m_caller_uid = 0;\n-  u16 m_caller_gid = 0;\n-\n-  struct TitleExportContext\n-  {\n-    struct ExportContent\n-    {\n-      OpenedContent content;\n-      std::array<u8, 16> iv{};\n-    };\n-\n-    bool valid = false;\n-    IOS::ES::TMDReader tmd;\n-    std::vector<u8> title_key;\n-    std::map<u32, ExportContent> contents;\n-  } m_export_title_context;\n+  std::array<Context, 3> m_contexts;\n };\n }  // namespace Device\n }  // namespace HLE\ndiff --git a/Source/Core/Core/IOS/ES/Identity.cpp b/Source/Core/Core/IOS/ES/Identity.cpp\nindex c4b5722..3ae6ba5 100644\n--- a/Source/Core/Core/IOS/ES/Identity.cpp\n+++ b/Source/Core/Core/IOS/ES/Identity.cpp\n@@ -63,7 +63,7 @@ IPCCommandResult ES::GetConsoleID(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::Encrypt(const IOCtlVRequest& request)\n+IPCCommandResult ES::Encrypt(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(3, 2))\n     return GetDefaultReply(ES_EINVAL);\n@@ -85,7 +85,7 @@ IPCCommandResult ES::Encrypt(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::Decrypt(const IOCtlVRequest& request)\n+IPCCommandResult ES::Decrypt(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(3, 2))\n     return GetDefaultReply(ES_EINVAL);\ndiff --git a/Source/Core/Core/IOS/ES/TitleContents.cpp b/Source/Core/Core/IOS/ES/TitleContents.cpp\nindex d97b74d..6a5fc64 100644\n--- a/Source/Core/Core/IOS/ES/TitleContents.cpp\n+++ b/Source/Core/Core/IOS/ES/TitleContents.cpp\n@@ -48,7 +48,7 @@ u32 ES::OpenTitleContent(u32 CFD, u64 TitleID, u16 Index)\n   return CFD;\n }\n \n-IPCCommandResult ES::OpenTitleContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::OpenTitleContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(3, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -64,7 +64,7 @@ IPCCommandResult ES::OpenTitleContent(const IOCtlVRequest& request)\n   return GetDefaultReply(CFD);\n }\n \n-IPCCommandResult ES::OpenContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::OpenContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -79,7 +79,7 @@ IPCCommandResult ES::OpenContent(const IOCtlVRequest& request)\n   return GetDefaultReply(CFD);\n }\n \n-IPCCommandResult ES::ReadContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::ReadContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 1))\n     return GetDefaultReply(ES_EINVAL);\n@@ -131,7 +131,7 @@ IPCCommandResult ES::ReadContent(const IOCtlVRequest& request)\n   return GetDefaultReply(Size);\n }\n \n-IPCCommandResult ES::CloseContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::CloseContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -160,7 +160,7 @@ IPCCommandResult ES::CloseContent(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::SeekContent(const IOCtlVRequest& request)\n+IPCCommandResult ES::SeekContent(u32 uid, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(3, 0))\n     return GetDefaultReply(ES_EINVAL);\ndiff --git a/Source/Core/Core/IOS/ES/TitleManagement.cpp b/Source/Core/Core/IOS/ES/TitleManagement.cpp\nindex a01e0f7..8426b15 100644\n--- a/Source/Core/Core/IOS/ES/TitleManagement.cpp\n+++ b/Source/Core/Core/IOS/ES/TitleManagement.cpp\n@@ -66,7 +66,7 @@ IPCCommandResult ES::AddTicket(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddTMD(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddTMD(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -76,18 +76,18 @@ IPCCommandResult ES::AddTMD(const IOCtlVRequest& request)\n \n   // Ioctlv 0x2b writes the TMD to /tmp/title.tmd (for imports) and doesn\'t seem to write it\n   // to either /import or /title. So here we simply have to set the import TMD.\n-  m_addtitle_tmd.SetBytes(std::move(tmd));\n+  context.title_import.tmd.SetBytes(std::move(tmd));\n   // TODO: validate TMDs and return the proper error code (-1027) if the signature type is invalid.\n-  if (!m_addtitle_tmd.IsValid())\n+  if (!context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n-  if (!IOS::ES::InitImport(m_addtitle_tmd.GetTitleId()))\n+  if (!IOS::ES::InitImport(context.title_import.tmd.GetTitleId()))\n     return GetDefaultReply(FS_EIO);\n \n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddTitleStart(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddTitleStart(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(4, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -96,19 +96,20 @@ IPCCommandResult ES::AddTitleStart(const IOCtlVRequest& request)\n   std::vector<u8> tmd(request.in_vectors[0].size);\n   Memory::CopyFromEmu(tmd.data(), request.in_vectors[0].address, request.in_vectors[0].size);\n \n-  m_addtitle_tmd.SetBytes(tmd);\n-  if (!m_addtitle_tmd.IsValid())\n+  context.title_import.tmd.SetBytes(tmd);\n+  if (!context.title_import.tmd.IsValid())\n   {\n     ERROR_LOG(IOS_ES, "Invalid TMD while adding title (size = %zd)", tmd.size());\n     return GetDefaultReply(ES_EINVAL);\n   }\n \n   // Finish a previous import (if it exists).\n-  const IOS::ES::TMDReader previous_tmd = IOS::ES::FindImportTMD(m_addtitle_tmd.GetTitleId());\n+  const IOS::ES::TMDReader previous_tmd =\n+      IOS::ES::FindImportTMD(context.title_import.tmd.GetTitleId());\n   if (previous_tmd.IsValid())\n     FinishImport(previous_tmd);\n \n-  if (!IOS::ES::InitImport(m_addtitle_tmd.GetTitleId()))\n+  if (!IOS::ES::InitImport(context.title_import.tmd.GetTitleId()))\n     return GetDefaultReply(FS_EIO);\n \n   // TODO: check and use the other vectors.\n@@ -116,7 +117,7 @@ IPCCommandResult ES::AddTitleStart(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddContentStart(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddContentStart(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(2, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -124,28 +125,28 @@ IPCCommandResult ES::AddContentStart(const IOCtlVRequest& request)\n   u64 title_id = Memory::Read_U64(request.in_vectors[0].address);\n   u32 content_id = Memory::Read_U32(request.in_vectors[1].address);\n \n-  if (m_addtitle_content_id != 0xFFFFFFFF)\n+  if (context.title_import.content_id != 0xFFFFFFFF)\n   {\n     ERROR_LOG(IOS_ES, "Trying to add content when we haven\'t finished adding "\n                       "another content. Unsupported.");\n     return GetDefaultReply(ES_EINVAL);\n   }\n-  m_addtitle_content_id = content_id;\n+  context.title_import.content_id = content_id;\n \n-  m_addtitle_content_buffer.clear();\n+  context.title_import.content_buffer.clear();\n \n   INFO_LOG(IOS_ES, "IOCTL_ES_ADDCONTENTSTART: title id %016" PRIx64 ", "\n                    "content id %08x",\n-           title_id, m_addtitle_content_id);\n+           title_id, context.title_import.content_id);\n \n-  if (!m_addtitle_tmd.IsValid())\n+  if (!context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n-  if (title_id != m_addtitle_tmd.GetTitleId())\n+  if (title_id != context.title_import.tmd.GetTitleId())\n   {\n     ERROR_LOG(IOS_ES, "IOCTL_ES_ADDCONTENTSTART: title id %016" PRIx64 " != "\n                       "TMD title id %016" PRIx64 ", ignoring",\n-              title_id, m_addtitle_tmd.GetTitleId());\n+              title_id, context.title_import.tmd.GetTitleId());\n   }\n \n   // We\'re supposed to return a "content file descriptor" here, which is\n@@ -156,7 +157,7 @@ IPCCommandResult ES::AddContentStart(const IOCtlVRequest& request)\n   return GetDefaultReply(content_fd);\n }\n \n-IPCCommandResult ES::AddContentData(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddContentData(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(2, 0))\n     return GetDefaultReply(ES_EINVAL);\n@@ -168,7 +169,8 @@ IPCCommandResult ES::AddContentData(const IOCtlVRequest& request)\n \n   u8* data_start = Memory::GetPointer(request.in_vectors[1].address);\n   u8* data_end = data_start + request.in_vectors[1].size;\n-  m_addtitle_content_buffer.insert(m_addtitle_content_buffer.end(), data_start, data_end);\n+  context.title_import.content_buffer.insert(context.title_import.content_buffer.end(), data_start,\n+                                             data_end);\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n@@ -184,22 +186,22 @@ static std::string GetImportContentPath(u64 title_id, u32 content_id)\n   return Common::GetImportTitlePath(title_id) + StringFromFormat("/content/%08x.app", content_id);\n }\n \n-IPCCommandResult ES::AddContentFinish(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddContentFinish(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 0))\n     return GetDefaultReply(ES_EINVAL);\n \n-  if (m_addtitle_content_id == 0xFFFFFFFF)\n+  if (context.title_import.content_id == 0xFFFFFFFF)\n     return GetDefaultReply(ES_EINVAL);\n \n   u32 content_fd = Memory::Read_U32(request.in_vectors[0].address);\n   INFO_LOG(IOS_ES, "IOCTL_ES_ADDCONTENTFINISH: content fd %08x", content_fd);\n \n-  if (!m_addtitle_tmd.IsValid())\n+  if (!context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n   // Try to find the title key from a pre-installed ticket.\n-  IOS::ES::TicketReader ticket = DiscIO::FindSignedTicket(m_addtitle_tmd.GetTitleId());\n+  IOS::ES::TicketReader ticket = DiscIO::FindSignedTicket(context.title_import.tmd.GetTitleId());\n   if (!ticket.IsValid())\n   {\n     return GetDefaultReply(ES_NO_TICKET);\n@@ -211,16 +213,16 @@ IPCCommandResult ES::AddContentFinish(const IOCtlVRequest& request)\n   // The IV for title content decryption is the lower two bytes of the\n   // content index, zero extended.\n   IOS::ES::Content content_info;\n-  if (!m_addtitle_tmd.FindContentById(m_addtitle_content_id, &content_info))\n+  if (!context.title_import.tmd.FindContentById(context.title_import.content_id, &content_info))\n   {\n     return GetDefaultReply(ES_EINVAL);\n   }\n   u8 iv[16] = {0};\n   iv[0] = (content_info.index >> 8) & 0xFF;\n   iv[1] = content_info.index & 0xFF;\n-  std::vector<u8> decrypted_data(m_addtitle_content_buffer.size());\n-  mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, m_addtitle_content_buffer.size(), iv,\n-                        m_addtitle_content_buffer.data(), decrypted_data.data());\n+  std::vector<u8> decrypted_data(context.title_import.content_buffer.size());\n+  mbedtls_aes_crypt_cbc(&aes_ctx, MBEDTLS_AES_DECRYPT, context.title_import.content_buffer.size(),\n+                        iv, context.title_import.content_buffer.data(), decrypted_data.data());\n   if (!CheckIfContentHashMatches(decrypted_data, content_info))\n   {\n     ERROR_LOG(IOS_ES, "AddContentFinish: Hash for content %08x doesn\'t match", content_info.id);\n@@ -235,12 +237,13 @@ IPCCommandResult ES::AddContentFinish(const IOCtlVRequest& request)\n   }\n   else\n   {\n-    content_path = GetImportContentPath(m_addtitle_tmd.GetTitleId(), m_addtitle_content_id);\n+    content_path = GetImportContentPath(context.title_import.tmd.GetTitleId(),\n+                                        context.title_import.content_id);\n   }\n   File::CreateFullPath(content_path);\n \n   const std::string temp_path = Common::RootUserPath(Common::FROM_SESSION_ROOT) +\n-                                StringFromFormat("/tmp/%08x.app", m_addtitle_content_id);\n+                                StringFromFormat("/tmp/%08x.app", context.title_import.content_id);\n   File::CreateFullPath(temp_path);\n \n   {\n@@ -258,32 +261,33 @@ IPCCommandResult ES::AddContentFinish(const IOCtlVRequest& request)\n     return GetDefaultReply(ES_EIO);\n   }\n \n-  m_addtitle_content_id = 0xFFFFFFFF;\n+  context.title_import.content_id = 0xFFFFFFFF;\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddTitleFinish(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddTitleFinish(Context& context, const IOCtlVRequest& request)\n {\n-  if (!request.HasNumberOfValidVectors(0, 0) || !m_addtitle_tmd.IsValid())\n+  if (!request.HasNumberOfValidVectors(0, 0) || !context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n-  if (!WriteImportTMD(m_addtitle_tmd))\n+  if (!WriteImportTMD(context.title_import.tmd))\n     return GetDefaultReply(ES_EIO);\n \n-  if (!FinishImport(m_addtitle_tmd))\n+  if (!FinishImport(context.title_import.tmd))\n     return GetDefaultReply(FS_EIO);\n \n   INFO_LOG(IOS_ES, "IOCTL_ES_ADDTITLEFINISH");\n-  m_addtitle_tmd.SetBytes({});\n+  context.title_import.tmd.SetBytes({});\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::AddTitleCancel(const IOCtlVRequest& request)\n+IPCCommandResult ES::AddTitleCancel(Context& context, const IOCtlVRequest& request)\n {\n-  if (!request.HasNumberOfValidVectors(0, 0) || !m_addtitle_tmd.IsValid())\n+  if (!request.HasNumberOfValidVectors(0, 0) || !context.title_import.tmd.IsValid())\n     return GetDefaultReply(ES_EINVAL);\n \n-  const IOS::ES::TMDReader original_tmd = IOS::ES::FindInstalledTMD(m_addtitle_tmd.GetTitleId());\n+  const IOS::ES::TMDReader original_tmd =\n+      IOS::ES::FindInstalledTMD(context.title_import.tmd.GetTitleId());\n   if (!original_tmd.IsValid())\n   {\n     // This should never happen unless someone messed with the installed TMD directly.\n@@ -294,7 +298,7 @@ IPCCommandResult ES::AddTitleCancel(const IOCtlVRequest& request)\n   if (!FinishImport(original_tmd))\n     return GetDefaultReply(FS_EIO);\n \n-  m_addtitle_tmd.SetBytes({});\n+  context.title_import.tmd.SetBytes({});\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n@@ -363,40 +367,40 @@ IPCCommandResult ES::DeleteTitleContent(const IOCtlVRequest& request)\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::ExportTitleInit(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportTitleInit(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 1) || request.in_vectors[0].size != 8)\n     return GetDefaultReply(ES_EINVAL);\n \n   // No concurrent title import/export is allowed.\n-  if (m_export_title_context.valid)\n+  if (context.title_export.valid)\n     return GetDefaultReply(ES_EINVAL);\n \n   const auto tmd = IOS::ES::FindInstalledTMD(Memory::Read_U64(request.in_vectors[0].address));\n   if (!tmd.IsValid())\n     return GetDefaultReply(FS_ENOENT);\n \n-  m_export_title_context.tmd = tmd;\n+  context.title_export.tmd = tmd;\n \n-  const auto ticket = DiscIO::FindSignedTicket(m_export_title_context.tmd.GetTitleId());\n+  const auto ticket = DiscIO::FindSignedTicket(context.title_export.tmd.GetTitleId());\n   if (!ticket.IsValid())\n     return GetDefaultReply(ES_NO_TICKET);\n-  if (ticket.GetTitleId() != m_export_title_context.tmd.GetTitleId())\n+  if (ticket.GetTitleId() != context.title_export.tmd.GetTitleId())\n     return GetDefaultReply(ES_EINVAL);\n \n-  m_export_title_context.title_key = ticket.GetTitleKey();\n+  context.title_export.title_key = ticket.GetTitleKey();\n \n-  const auto& raw_tmd = m_export_title_context.tmd.GetRawTMD();\n+  const auto& raw_tmd = context.title_export.tmd.GetRawTMD();\n   if (request.io_vectors[0].size != raw_tmd.size())\n     return GetDefaultReply(ES_EINVAL);\n \n   Memory::CopyToEmu(request.io_vectors[0].address, raw_tmd.data(), raw_tmd.size());\n \n-  m_export_title_context.valid = true;\n+  context.title_export.valid = true;\n   return GetDefaultReply(IPC_SUCCESS);\n }\n \n-IPCCommandResult ES::ExportContentBegin(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportContentBegin(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(2, 0) || request.in_vectors[0].size != 8 ||\n       request.in_vectors[1].size != 4)\n@@ -405,7 +409,7 @@ IPCCommandResult ES::ExportContentBegin(const IOCtlVRequest& request)\n   const u64 title_id = Memory::Read_U64(request.in_vectors[0].address);\n   const u32 content_id = Memory::Read_U32(request.in_vectors[1].address);\n \n-  if (!m_export_title_context.valid || m_export_title_context.tmd.GetTitleId() != title_id)\n+  if (!context.title_export.valid || context.title_export.tmd.GetTitleId() != title_id)\n   {\n     ERROR_LOG(IOS_ES, "Tried to use ExportContentBegin with an invalid title export context.");\n     return GetDefaultReply(ES_EINVAL);\n@@ -426,7 +430,7 @@ IPCCommandResult ES::ExportContentBegin(const IOCtlVRequest& request)\n   content->m_Data->Open();\n \n   u32 cid = 0;\n-  while (m_export_title_context.contents.find(cid) != m_export_title_context.contents.end())\n+  while (context.title_export.contents.find(cid) != context.title_export.contents.end())\n     cid++;\n \n   TitleExportContext::ExportContent content_export;\n@@ -434,12 +438,12 @@ IPCCommandResult ES::ExportContentBegin(const IOCtlVRequest& request)\n   content_export.iv[0] = (content->m_metadata.index >> 8) & 0xFF;\n   content_export.iv[1] = content->m_metadata.index & 0xFF;\n \n-  m_export_title_context.contents.emplace(cid, content_export);\n+  context.title_export.contents.emplace(cid, content_export);\n   // IOS returns a content ID which is passed to further content calls.\n   return GetDefaultReply(cid);\n }\n \n-IPCCommandResult ES::ExportContentData(const IOCtlVRequest& request)\n+IPCCommandResult ES::ExportContentData(Context& context, const IOCtlVRequest& request)\n {\n   if (!request.HasNumberOfValidVectors(1, 1) || request.in_vectors[0].size != 4 ||\n       request.io_vectors[0].size == 0)\n@@ -450,8 +454,8 @@ IPCCommandResult ES::ExportContentData(const IOCtlVRequest& request)\n   const u32 content_id = Memory::Read_U32(request.in_vectors[0].address);\n   const u32 bytes_to_read = request.io_vectors[0].size;\n \n-  const auto iterator = m_export_title_context.contents.find(content_id);\n-  if (!m_export_title_context.valid || iterator == m_export_title_context.contents.end() ||\n+  const auto iterator = context.title_export.contents.find(content_id);\n+  if (!context.title_export.valid || iterator == context.title_export.contents.end() ||\n       iterator->second.content.m_position >= iterator->second.content.m_content.size)\n   {\n     return GetDefaultReply(ES_EINVAL);\n@@ -479,7 +483,7 @@ IPCCommandResult ES::ExportContentData(const IOCtlVRequest& request)\n   std::vector&l