Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コードレビューの話

 コードレビューの話

新卒エンジニア向けにコードレビューを「する」話をしました。
http://hisaichi5518.hatenablog.jp/entry/2014/10/29/165721

hisaichi5518

October 29, 2014
Tweet

More Decks by hisaichi5518

Other Decks in Technology

Transcript

  1. (.01FQBCP *OD
    IJTBJDIJ
    ৽ଔݚम
    ίʔυϨϏϡʔͷ࿩

    View full-size slide

  2. ࣗݾ঺հ
    ͻ͍ͪ͞

    View full-size slide

  3. લ৬Ͱ΍ͬͯͨࣄ
    ιʔγϟϧήʔϜͷ"1*࡞ͬͯͨ
    ϦʔυΤϯδχΞ
    ϓϩδΣΫτͷϓϧϦΫɺશ෦ίʔυϨϏϡʔͯ͠
    ͨ
    ଞͷਓͻ͍͕ͪ͞0,͢Ε͹ϚʔδΈ͍ͨͳɻ௒
    େมͩͬͨʜʜʜʜʜ
    ίʔυϨϏϡʔʹ͍ͭͯߟ͑Δ͜ͱ͕ଟ͔ͬͨɻ

    View full-size slide

  4. ࠓ೔࿩͞ͳ͍ࣄ
    ϨϏϡʔͯ͠΋Β͏ͱ͖ͷ࿩
    ίʔυϨϏϡʔཷ·Δ໰୊ͱ͔ӡ༻
    ͯ͠Δͱग़ͯ͘Δ໰୊
    ίʔυϨϏϡʔಋೖ౳
    ίʔυϨϏϡʔΛʮ͢Δʯ࿩Λ͠·͢ɻ

    View full-size slide

  5. ίʔυϨϏϡʔͱ͸
    ίʔυϨϏϡʔʢӳ$PEFSFWJFXʣ
    ͸ɺιϑτ΢ΣΞ։ൃ޻ఔͰݟա͝
    ͞ΕͨޡΓΛݕग़ɾमਖ਼͢ΔͨΊʹ
    ιʔείʔυͷମܥతͳݕࠪʢࠪಡʣ
    Λߦ͏͜ͱɻ

    View full-size slide

  6. ίʔυϨϏϡʔͱ͸
    ίʔυϨϏϡʔʢӳ$PEFSFWJFXʣ
    ͸ɺιϑτ΢ΣΞ։ൃ޻ఔͰݟա͝
    ͞ΕͨޡΓΛݕग़ɾमਖ਼͢ΔͨΊʹ
    ιʔείʔυͷମܥతͳݕࠪʢࠪಡʣ
    Λߦ͏͜ͱɻ

    View full-size slide

  7. ຊ౰ʹ
    ͦΕ͚ͩʁ

    View full-size slide

  8. ίʔυϨϏϡʔͷ໨త
    ػցతʹൃݟग़དྷͳ͍ޡΓͷൃݟ
    ٕज़ྗ޲্
    ଐਓੑഉআ

    View full-size slide

  9. ͜ͷͭͷதͰ
    ৽ଔࢯ͕ʮࠓʯٻΊΒΕΔࣄ

    View full-size slide

  10. ʮࠓʯɺ৽ଔࢯͨͪʹظ଴͞ΕΔͰ͋Ζ͏͜ͱ
    ٕज़ྗ޲্
    ଐਓੑͷഉআ

    View full-size slide

  11. ίʔυϨϏϡʔͷ໨త
    ػցతʹൃݟग़དྷͳ͍ޡΓͷൃݟ
    ٕज़ྗ޲্
    ଐਓੑഉআ
    ͍ͭ͜͸ʁʁʁ

    View full-size slide

  12. ϨϕϧͱϨϕϧ
    Կࣄʹ΋ஈ֊͕͋Δ
    Ϩϕϧͱʹ෼͚ͯɺ·ͣ͸Ϩϕϧ
    Λग़དྷΔΑ͏ʹ͢Δɻ

    View full-size slide

  13. ֤໨తͷΰʔϧ
    ٕज़ྗ޲্
    ίʔυ͕ͳͥͦ͏ͳ͍ͬͯΔͷ͔ཧղग़
    དྷΔ
    ଐਓੑͷഉআ
    ίʔυ͕ͳͥͦ͏ͳ͍ͬͯΔͷ͔ཧղग़
    དྷΔ

    View full-size slide

  14. ·Δͬͱ·ͱΊͯ
    ίʔυΛཧղ͢Δ

    View full-size slide

  15. Ϩϕϧ
    ίʔυΛཧղ͢Δ

    View full-size slide

  16. ίʔυΛཧղ͢Δͬͯ
    Ͳ͏͢Ε͹͑͑Μ΍ʜ
    ೉͍͠Θʜʜʜ

    View full-size slide

  17. ϨϕϧΛୡ੒͢ΔͨΊͷ
    ίʔυϨϏϡʔʹ͓͍ͯ
    ΍Δ͜ͱ͸͚ͭͩ

    View full-size slide

  18. Θ͔Βͳ͍ࣄΛฉ͘

    View full-size slide

  19. ίʔυ͕ཧղͰ͖ΔΑ͏ʹͳΔʹ͸
    ͳΜͰ͜͏ͳ͍ͬͯΔͷ͔ʁΛߟ
    ͑ͳ͕ΒίʔυΛಡΉ
    Θ͔Βͳ͍ͱ͜Ζ͕͋Δͱ೰Ή
    ෼೰ΜͩΒࣗ෼Ͱ͸Θ͔Βͳ
    ͍ͱ൑அͯ͠ฉ͘ɻ

    View full-size slide

  20. ίʔυ͕ཧղͰ͖ΔΑ͏ʹͳΔʹ͸
    ʮͳΜͰ͜͜ʹϝιουॻ͍ͯΔΜͩΖʯ
    ʮͳΜͰ"͡Όͳͯ͘#ͬͯॻ͖ํͳΜͩΖʁʯ
    ʮͳΜͰ͜͜Ͱ"ͯ͠ΔΜͩΖʁʯ
    ʮͳΜͰʜʜʜʜʜʯ
    ʮͳΜͰͳΜ΍ʜʜʜʜʯ
    ʮͳΜͰʙʙʙʙʙʙʯ

    View full-size slide

  21. ͳΜͰɾ೰Ήɾฉ͘
    Λ܁Γฦ͍ͯ͠Δͱ
    Ϩϕϧ͕ग़དྷΔΑ͏ʹͳΔ

    View full-size slide

  22. ͳΜͰɾ೰Ήɾฉ͘
    Λ܁Γฦ͍ͯ͠Δͱ
    ίʔυ͕ཧղग़དྷΔΑ͏ʹͳΔ

    View full-size slide

  23. Ϩϕϧୡ੒

    View full-size slide

  24. ίʔυϨϏϡʔͷ໨త
    ػցతʹൃݟग़དྷͳ͍ޡΓͷൃݟ
    ٕज़ྗ޲্
    ଐਓੑഉআ
    ࣍͸ɺ͍ۙকདྷٻΊΒΕΔɺίΠπʂʂʂ̍̍

    View full-size slide

  25. Ϩϕϧ
    ػցతʹൃݟग़དྷͳ͍ޡΓͷ
    ൃݟ

    View full-size slide

  26. ػցతʹൃݟग़དྷΔ΋ͷ
    42-ͷ/໰୊
    ίʔυͷϑΥʔϚοτ

    View full-size slide

  27. 42-/໰୊
    ϧʔϓͷதͰ42-ൃߦ͠·͘Γ
    ճϧʔϓͨ͠Β42-͕
    ճୟ͔ΕΔʢ˔ʆЏ˔ʣ
    3BJMTʹ͸ɺCVMMFUͱ͍͏ͷ͕͋Δ
    CVMMFU͸ɺ/໰୊Λൃݟग़དྷΔ

    View full-size slide

  28. ίʔυϑΥʔϚοτ
    SVCPDPQͱ͔Λ࢖ͬͯɺελΠϧʹ
    ҧ൓ͨ͠ΒKFOLJOT͕͚͜Δͱ͔͢
    Δɻ

    View full-size slide

  29. ػցతʹΘ͔Δ΋ͷ͸
    ػցʹ೚ָͤͯΛ͢Δ

    View full-size slide

  30. ػցతʹൃݟग़དྷͳ͍PSग़དྷΔ͕খ೉͍͠
    ηΩϡϦςΟ
    42-
    ϨʔείϯσΟγϣϯ
    ࢓༷ͱίʔυͷໃ६
    ࣮ߦ଎౓
    ઃܭ
    Θ͔Γ΍͢͞
    "ͱ#ɺͲͪΒ͕φ΢͍ʁ

    View full-size slide

  31. ηΩϡϦςΟ
    944
    $43'
    42-ΠϯδΣΫγϣϯ
    ৄ͘͠͸

    View full-size slide

  32. 42-
    ΠϯσοΫε࢖ΘΕͯͳ͍
    ΠϯσοΫεແବʹషͬͯΔ

    View full-size slide

  33. ϨʔείϯσΟγϣϯ
    ಉ࣌ʹ࣮ߦ͞ΕͨΒ͏ΜͨΒ͔Μͨ
    Βʂʂʂʂʂʂʂʂʂʂʂʂʂ

    View full-size slide

  34. ࢓༷ͱίʔυͷໃ६
    ͦ΋ͦ΋͜ͷίʔυɺ࢓༷ʹ߹ͬͯ
    ͳ͍݅
    ςετҙຯͳ͍݅

    View full-size slide

  35. ࣮ߦ଎౓
    ͬͪ͜ͷํ͕ૣ͘Ͷʁʁʁʁ
    ඞͣϕϯνϚʔΫऔΔ
    Ωϟογϡͨ͠ํ͕͍͍͔΋ɺΈͨ
    ͍ͳ࿩ͱ͔΋͢Δ

    View full-size slide

  36. ઃܭ
    ίϯτϩʔϥʔʹϩδοΫΛॻ͘΂
    ͖Ͱ͸ͳ͍͏ΜͨΒ͔ΜͨΒ
    ίʔυϨϏϡʔͷ࣌఺Ͱ͜ͷ࿩͕ग़
    ΔΑ͏Ͱ͋Ε͹ɺίʔυΛॻ͘લʹ
    ૬ஊ͢ΔΑ͏ʹ͢Δɻ

    View full-size slide

  37. Θ͔Γ΍͢͞
    "ͱ#ɺൺ΂Δͱ"ͷํ͕Θ͔Γ΍͍͢ʂʂ̍
    WJNWT&NBDTͷΑ͏ͳͨͩͷԥΓ߹͍ʹͳ
    ΔՄೳੑ͕͋Δ
    ౴͕͑ͳ͍΋ͷʹؔͯ͠͸ɺର໘Ͱ࿩͢
    ʙ෼࿩ͯ͠ෆໟͱࢥͬͨΒෆໟͰ͢Ͷͬ
    ͯݴͬͯऴΘΒͤΔɻ

    View full-size slide

  38. "ͱ#ɺͲ͕ͬͪφ΢͍ʁ
    ࠓ͸ɺͬͪ͜ͷ΄͏͕φ΢͍ͥʂΈ
    ͍ͨͳͷ݁ߏ͋Δ
    άάͬͯݟ͚ͭͨͷ͕Φϫίϯʹͳͬ
    ͯΔՄೳੑ΋ʂʂʂʂʂ

    View full-size slide

  39. ʢ˔ʆЏʅ˔ʣ

    View full-size slide

  40. Ϩϕϧ
    ϝονϟϜζΠ

    View full-size slide

  41. ͜ΕΒ͕ग़དྷΔΑ͏ʹͳΔʹ
    ͸ɺ༷ʑͳ஌ࣝɾܦݧ͕ඞཁ

    View full-size slide

  42. ͦͯ͠ɺେલఏͱͯ͠
    ଞͷਓͷίʔυΛݟͯ
    ཧղग़དྷΔඞཁ΋͋Δɻ

    View full-size slide

  43. ͦΜͳ͜ΜͳͰ

    View full-size slide

  44. ίʔυϨϏϡʔͷ໨తΛཧղͯ͠
    ࠓɺ΍Δ΂͖͜ͱ΋ཧղग़དྷɺ
    ͦͷ΍Γํ΋ཧղग़དྷͨɻ
    ͦͷ࣍ʹ΍Δ͜ͱ΋Θ͔ͬͨʂʂ
    ΋͏ίʔυϨϏϡʔ͸׬ᘳʂʂ

    View full-size slide

  45. Ͱ͸ͳ͍ͷͰ͢ʜ

    View full-size slide

  46. ୈೋ෦
    ίʔυϦʔσΟϯάฤ

    View full-size slide

  47. ίʔυΛಡΉɻ
    τςϞɺϜζΧγΠ

    View full-size slide

  48. ࠷ߴͷಡΈํΛ
    ڭ͑ͯ΄͍͠ʂ

    View full-size slide

  49. Զ͕஌Γ͍ͨ
    Θʂʂʂʂʂ
    ʂʂʂʂʂʂ
    ʂʂʂʂʂʂ

    View full-size slide

  50. ίʔυϨϏϡʔ࣌ͷಡΈํ
    ʙͻ͍ͪ͞ฤʙ

    View full-size slide

  51. ݸͷεςοϓ

    View full-size slide

  52. ղܾ͍ͨ͠໰୊Λཧղ͢Δ
    ϓϧϦΫͷαϚϦʔΛಡΉ
    Կ͕͍͔ͨ͠
    ԿͷͨΊʹ͢Δͷ͔

    View full-size slide

  53. ςετ͕௨ͬͯΔ͔֬ೝ
    ςετ௨ͬͯͳ͍ͱجຊతʹ͸ݟͳ
    ͍

    View full-size slide

  54. ίϛοτϩάͱมߋ͞ΕͨίʔυΛશ෦ݟΔ
    ҰͭҰͭݟΔ
    ίϛοτϩάʹͳΜͰͦ͏͔ͨ͠ॻ͔ΕͯΔࣄ
    ͕͋ΔͷͰίϛοτϩάΛݟΔɻ
    ؾʹͳΔͱ͜Ζɾٙ໰͕͋ͬͨΒϝϞ͓ͯ͘͠
    ݟͨॠؒʹίϝϯτͨ͘͠ͳΔͷͰɺखݩͰUJH
    Λ࢖ͬͯݟΔɻ

    View full-size slide

  55. ಈ͔ͯ͠ΈΔ
    ίϛοτϩάΛશ෦ோΊऴΘͬͨΒɺ
    ؾʹͳͬͨͱ͜Ζͱ͔खݩͰಈ͔͠
    ͯΈΔ

    View full-size slide

  56. 'JMFT$IBOHFEΛோΊΔ
    શମͷ%J⒎ΛݟΔɻ
    εςοϓͰϝϞͨ͠ͱ͜Ζͷ੔ཧ

    View full-size slide

  57. 'JMFT$IBOHFEͷͱ͜ΖʹίϝϯτΛॻ͘
    ϝϞͨ͠ͱ͜ΖΛ(JUIVCʹίϝϯτ
    ͍ͯ͘͠

    View full-size slide

  58. ͜ͷݸͷεςοϓ
    ຖճ΍Δඞཁ͋Δʁ

    View full-size slide

  59. ͜ͷ΍Γํ͸ϕετͰ͸ͳ͍͠ɺ
    ϕετ͸ଘࡏ͠ͳ͍ɻ
    ࣗ෼ͳΓͷ΍ΓํΛ୳͠ଓ͚Δ͔͠ͳ͍ɻ

    View full-size slide

  60. ͦΜͳ͜ΜͳͰ

    View full-size slide



  61. ΋͏ίʔυϨϏϡʔ
    ͸׬ᘳʂʂ

    View full-size slide

  62. Ͱ͸ͳ͍ͷͰ͢ʜ

    View full-size slide

  63. ୈࡾ෦
    ఻͑ํׂ͕ฤ

    View full-size slide

  64. ͜ͷεϥΠυΛ࡞Δʹ౰ͨͬͯɺ
    લ৬ޙഐ !.BDP@5BTV
    ʹ
    νʔϜʹδϣΠϯͨ࣌͠ͷ
    ίʔυϨϏϡʔʹ͍ͭͯฉ͍ͯΈͨɻ

    View full-size slide

  65. ҙ͍ࣝͯͨ͜͠ͱ͸ʁ
    ʮͳΜͰ͜͏ͯ͠ΔΜͩʁʯ͓ͬͯ
    ΋ͬͨΒ·ͣฉ͘
    ϨϏϡʔͷॻ͖ํ

    View full-size slide

  66. ҙ͍ࣝͯͨ͜͠ͱ͸ʁ
    ʮͳΜͰ͜͏ͯ͠ΔΜͩʁʯ͓ͬͯ
    ΋ͬͨΒ·ͣฉ͘
    ϨϏϡʔͷॻ͖ํ

    View full-size slide

  67. ԿނɺϨϏϡʔͷॻ͖ํΛ
    ҙࣝ͢Δඞཁ͕͋Δͷ͔ʁ

    View full-size slide

  68. ࠔͬͨ͜ͱ͸ʁ
    ઌഐ͕ාͯ͘ࢥͬͨ͜ͱ͕ॻ͚ͳ͍
    ࣗ෼͸ྗྔແ͍ͷʹͦΜͳϨϏϡʔ
    ͰҒͦ͏ͳ͜ͱݴ͍͍ͬͯͷ͔

    View full-size slide

  69. ਓ͕͍ؒΔͱ΄΅࣮֬ʹਓؒؔ܎ͷ໰
    ୊͸ग़ͯ͘Δɻ
    ਓؒؔ܎ͷ໰୊͸ɺޡղ͔Β࢝·Δ͜
    ͱ͕ଟ͍ͱ๻͸ࢥ͍ͬͯΔɻ
    إΛ߹ΘͤͣʹߦΘΕΔίʔυϨϏϡʔ
    ͸ɺͦͷޡղΛੜΈग़͢৔ॴʹͳΔՄ
    ೳੑ͕͋Δͱ΋ࢥ͍ͬͯͯɺϨϏϡʔ
    ͷॻ͖ํΛؾΛ͚ͭΔ͜ͱͰɺͦ͏͍ͬ
    ͨޡղΛੜ·ΕΔͷΛগͳ͘͢Δ΂͖ɻ

    View full-size slide

  70. ਓؒؔ܎Ͱ೰Έͨ͘ͳ͍ͷͰɺ
    ޡղ͞Εͳ͍Α͏ʹ͢Δɻ

    View full-size slide

  71. ఻͑ํΛஸೡʹ͢Δ

    View full-size slide

  72. ཧ༝Λॻ͘

    View full-size slide

  73. ཧ༝Λॻ͘
    ʮ΄͛΄͛ɺΑ͘ͳ͍ؾ͕͠·͢ʯ
    ʮ΄͛΄͛͸"ͳͷͰɺΑ͘ͳ͍ؾ
    ͕͠·͢ʯ

    View full-size slide

  74. ๙ΊΔ
    ʮ΄͛΄͛͸"ͳͷͰɺΑ͘ͳ͍ؾ
    ͕͠·͢ʯ
    ʮ͜ͷίʔυՄѪ͍ΜͰ͕͢ɺ΄͛
    ΄͛͸"ͳͷͰɺΑ͘ͳ͍ؾ͕͠·
    ͢ʯ

    View full-size slide

  75. ఏҊ͢Δ
    ʮ΄͛΄͛͸"ͳͷͰɺΑ͘ͳ͍ؾ
    ͕͠·͢ʯ
    ʮ΄͛΄͛͸"ͳͷͰɺΑ͘ͳ͍ؾ
    ͕͠·͢ɻ;͕;͕ͷํ͕͍͍ͱ
    ࢥͬͨΜͰ͕͢ɺͲ͏Ͱ͠ΐ͏ʯ

    View full-size slide

  76. ఏҊʹ΋ཧ༝Λॻ͘

    View full-size slide

  77. ఏҊʹ΋ཧ༝Λॻ͘
    ʮ΄͛΄͛͸"ͳͷͰɺΑ͘ͳ͍ؾ͕͠
    ·͢ɻ;͕;͕ͷํ͕͍͍ͱࢥͬͨΜͰ
    ͕͢ɺͲ͏Ͱ͠ΐ͏ʯ
    ʮ΄͛΄͛͸"ͳͷͰɺΑ͘ͳ͍ؾ͕͠
    ·͢ɻ;͕;͕ͷํ͕ղফ͞Εɺ͔ͭ#ͳ
    ͷͰྑ͍ͱࢥͬͨΜͰ͕͢ɺͲ͏Ͱ͠ΐ
    ͏ʯ

    View full-size slide

  78. ͳΜͳΒ
    ίʔυͰࣔ͢

    View full-size slide

  79. ͳΜͳΒίʔυͰࣔ͢
    ʮ΄͛΄͛͸"ͳͷͰɺΑ͘ͳ͍ؾ͕͠·
    ͢ɻ;͕;͕ͷํ͕ղফ͞Εɺ͔ͭ#ͳͷ
    Ͱྑ͍ͱࢥͬͨΜͰ͕͢ɺͲ͏Ͱ͠ΐ͏ʯ
    ʮ΄͛΄͛͸"ͳͷͰɺΑ͘ͳ͍ؾ͕͠·
    ͢ɻ;͕;͕ͷํ͕ղফ͞Εɺ͔ͭ#ͳͷ
    Ͱྑ͍ͱࢥͬͨΜͰ͕͢ɺͲ͏Ͱ͠ΐ͏ʁ
    ͜͏͍͏ײ͡Ͱ͢ʯ

    View full-size slide

  80. ╹◡╹
    ŷţƄţŝƄƂƁŦʙ

    View full-size slide

  81. େৎ෉ʂʂʂʂʂʂ
    ஈ֊͕͋Δʂʂʂʂ

    View full-size slide

  82. ͜ͷ࿩͸ɺ͖ͬ͞࿩ͨ͠Ϩϕϧ͕ग़དྷ
    Δਓୡ͕΍Δ΂͖͜ͱɻ
    ୭ʹͰ΋ग़དྷΔɺ؆୯ͳ΋ͷ͕͋Δʂʂʂ

    View full-size slide

  83. σδλϧจࣈʹ͸
    ײ৘͕͜΋Γʹ͍͘
    ͱ͍͏࿩

    View full-size slide

  84. ର໘Ͱ࿩͍ͯ͠Δͱإ͕ݟ͑Δɻ
    ද৘͕Θ͔Δ
    ޡղʹܨ͕Γʹ͍͘

    View full-size slide

  85. จࣈͷΈͩͱ
    إ͕ͳ͍
    ද৘͕ͳ͍
    ޡղʹܨ͕Γ΍͍͢

    View full-size slide

  86. ͲͪΒ͕ΊͰ͍ͨ
    ͱײ͡Δʁ

    View full-size slide

  87. ʮ͍͍ͱࢥ͍·͢ʯ

    View full-size slide

  88. -(5.-PPLT(PPE5P.F

    View full-size slide

  89. ͲͪΒ΋ಉ͡ҙຯͳͷʹɺ
    શ͘ΊͰ͕ͨ͞ҧ͏ɻ

    View full-size slide

  90. ΋ͬͱ
    ΊͰͨ͘Ͱ͖Δ

    View full-size slide

  91. ΊͰͨ͘͢Δͱ͸

    View full-size slide

  92. ײ৘ׂ૿ʂʂʂ

    View full-size slide

  93. ϨϏϡʔͰྑͦ͞͏
    ͱࢥͬͨΒ࢖͏ɻ

    View full-size slide

  94. MHUNJO
    IUUQMHUNJO

    View full-size slide

  95. UJRBWDPN
    IUUQUJRBWDPN

    View full-size slide

  96. ͓ͬ͞Μ-(5.͹͔Γͩͱ
    ͭΒ͍ͷͰɺඒঁ-(5.
    IUUQIJTBJDIJIBUFOBCMPHKQFOUSZ

    View full-size slide

  97. ͦΜͳ͜ΜͳͰ

    View full-size slide



  98. ΋͏ίʔυϨϏϡʔ
    ͸׬ᘳʂʂ

    View full-size slide

  99. ͱࠓ͸ࢥͬͱ
    ͜ʂʂʂ

    View full-size slide

  100. ࠓ೔࿩ͨ͜͠ͱ
    ίʔυϨϏϡʔͷ໨త
    ࠓ΍Δ΂͖͜ͱɾͦͷ΍Γํ
    ࣍ʹ΍Δ͜ͱ
    ϨϏϡʔͷ࢓ํʢͻ͍ͪ͞ฤʣ
    ϨϏϡʔ͸఻͑ํׂ͕
    ײ৘ࡾׂ૿͠ͰΊͰͨ͞Ξοϓ

    View full-size slide

  101. ࢀߟॻ੶63-ਓؒ
    !.BDP@5BTV
    ఻͑ํׂ͕
    IUUQTHJTUHJUIVCDPN.BDP5BTV
    DEEECBGFEC
    IUUQIJUPEFIBUFOBCMPHDPNFOUSZ

    IUUQTIJCBZVIBUFOBCMPHDPNFOUSZ

    IUUQIBLPCFIBUFOBCMPHDPNFOUSZ

    View full-size slide