Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit 8862787
Author: Roman Rodionov <roman_rodionov@epam.com>
Date:   Wed Dec 11 23:06:58 2024 +0100

    Backmerge: #5949 - Delete of micromolecules bonds works wrong (or doesn't work) (#6124)

    * #5949 - Delete of micromolecules bonds works wrong (or doesn't work)

    - added invertAfterAllOperations method to atom and bonds operations to allow renderers rely on final state of model before rendering
    - added deleting of atoms and bonds from molecules struct to synchronize molecules and macromolecules modes
    - reworked bonds/atoms deletion logic
    - moved post execution logic from renderer to command

commit dc4cfdc
Author: Igor Kostrubin <kostrubin@bk.ru>
Date:   Wed Dec 11 20:54:17 2024 +0100

    #5796 - Indigo functions doesn't work if monomer on micro canvas - system throws an error: Error: Cannot deserialize input JSON. (#6130)

commit 014472b
Author: Roman Rodionov <roman_rodionov@epam.com>
Date:   Wed Dec 11 17:50:13 2024 +0100

    #5317 - Some side chain bonds are not shown in Sequence mode for bases, CHEMs, phosphates and sugars (#6054)

commit b236964
Author: Maksim Labovich <lumihis+github@gmail.com>
Date:   Wed Dec 11 18:55:54 2024 +0300

    #5476 - Copy/Cut and Paste using Ctrl+C/X and Ctrl+V doesn't work for static elements in Mozilla Firefox (#6121)

    * #5476 - save to text/plain in KET format instead of RXN

    - Firefox doesn't support MIME types other than text/plain in ClipboardItem, and RXN format saved by default to text/plain supports only chemical elements

    * #5476 - added comment, added stringify for data object to avoid [object Object] in console

commit fa13b99
Author: Roman Rodionov <roman_rodionov@epam.com>
Date:   Wed Dec 11 15:48:24 2024 +0100

    #6086 - Unable to create antisense chains for ambiguous monomers from the library (#6113) (#6118)

    - added antisense creation for chains with ambiguous bases

commit 668758d
Author: Roman Rodionov <roman_rodionov@epam.com>
Date:   Wed Dec 11 15:34:37 2024 +0100

    #6096 - Antisense creation works wrong in case of partial selection (#6122) (#6123)

    - fixed creation of antisense for partial selection by several pieces in one chain

commit 89f5ce6
Author: Ruslan <117785539+Guch1g0v@users.noreply.github.com>
Date:   Wed Dec 11 13:14:21 2024 +0500

    #6127 - Hover mouse over ambiguous monomer on Micromolecules canvas causes app crash (#6128)

commit cca5f90
Author: Anrei Menshikov <95479023+Drimodaren@users.noreply.github.com>
Date:   Wed Dec 11 12:05:35 2024 +0400

    #5978-entire-element-bounding-box-should-be-clickable-not-only-black-dots (#6059)

    * 5978-entire-element-bounding-box-should-be-clickable-not-only-black-dots

    * Refactoring

    * fix test

    * add new metod bondHoverablePath after review

    * createBondHoverablePath new logic

    * add type,const and refctoring createBondHoverablePath

    * commit TODO for mouseEvents

    * add ?? operand

    ---------

    Co-authored-by: Andrey Menshikov <andrey.menshikov@bostongene.com>

commit 932ed0f
Author: Roman Rodionov <roman_rodionov@epam.com>
Date:   Tue Dec 10 12:49:17 2024 +0100

    Backmerge: #6068 - Same chain configuration imported by different HELM layouted differently (anyway - both are wrong) (#6111)

    * #6068 - Same chain configuration imported by different HELM layouted differently (anyway - both are wrong) (#6099)

    #6074 - System doesn't flip chain if connected to monomer but not to base (2)

    #6068 - Same chain configuration imported by different HELM layouted differently (anyway - both are wrong)

    #6074 - System doesn't flip chain if connected to monomer but not to base (2)

    #6080 - System doesn't flip chain if connected to monomer but not to base (3)

    #6081 - Smaller chain should be at the bottom

    #6087 - Antisense layout is wrong for any ambiguouse base from the library

    #6077 - H-bond is not alligned to Snake mode view in some cases

    #6076 - Two-to-one base H-bond connection layouted wrong

    #6075 - In case of multipal H-bonds system should arrange antisence chain to first base of bottom chain

    #6070 - System doesn't flip chain if connected to monomer but not to base

    #6067 - Two chains connected by H-bond arranged wrong if third bond present on the canvas

    #6061 - RNA chain remain flipped after hydrogen bond removal

    - reworked antisense chains calculation

    * - fixed flacky test
  • Loading branch information
knadonenkoepam committed Dec 12, 2024
1 parent d333ff8 commit dd20fad
Show file tree
Hide file tree
Showing 612 changed files with 747 additions and 315 deletions.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ test.describe('Import-Saving .ket Files', () => {
test('Validate that saving to .ket file of any monomer from our Library does not change after loading it back from .ket file to canvas', async () => {
/*
Test case: Import/Saving files #3827 #3757
Description: The monomer name is present in the preview after opening the saved file.
Description: The monomer name is present in the preview after opening the saved file.
*/
// Reload needed as monomer IDs increment in prior tests, affecting data comparasion
await pageReload(page);
Expand All @@ -166,7 +166,7 @@ test.describe('Import-Saving .ket Files', () => {
test('Check that after loading from a file and then pressing undo, it does not break the selection/moving functionality', async () => {
/*
Test case: Import/Saving files #3756
Description: After pressing Undo not break the selection/moving functionality.
Description: After pressing Undo not break the selection/moving functionality.
*/
await openFileAndAddToCanvasMacro(
'KET/Peptide-Enumeration-One-Two-Three-connections3.ket',
Expand All @@ -189,7 +189,7 @@ test.describe('Import-Saving .ket Files', () => {
test('Check that fields "class" and "classHELM" are presents into .ket file', async () => {
/*
Test case: Import/Saving files #3846
Description: Fields "class" and "classHELM" are presents into .ket file.
Description: Fields "class" and "classHELM" are presents into .ket file.
*/
// Reload needed as monomer IDs increment in prior tests, affecting data comparasion
await pageReload(page);
Expand All @@ -214,7 +214,7 @@ test.describe('Import-Saving .ket Files', () => {
test('Check .ket file that "leavingGroup" section contain information about number of atoms', async () => {
/*
Test case: Import/Saving files #4172
Description: "leavingGroup" section contain information about number of atoms.
Description: "leavingGroup" section contain information about number of atoms.
*/
// Reload needed as monomer IDs increment in prior tests, affecting data comparasion
await pageReload(page);
Expand Down Expand Up @@ -922,8 +922,10 @@ test(`Verify that the structure in macro mode can be saved as a .ket file, and a
'KET/Micro-Macro-Switcher/Complicated structures on the canvas-expected.ket';

await openFileAndAddToCanvasAsNewProject(KETFile, page);
await moveMouseAway(page);
await takeEditorScreenshot(page);
await verifyFile2(page, KETFileExpected, FileType.KET);
await openFileAndAddToCanvasAsNewProject(KETFileExpected, page);
await moveMouseAway(page);
await takeEditorScreenshot(page);
});
Original file line number Diff line number Diff line change
Expand Up @@ -232,85 +232,85 @@ const sequences: ISequence[] = [
Id: 1,
FileName: 'KET/Sequence-Mode-Replacement/sequence of peptides (A).ket',
SequenceName: 'sequence of peptides (A)',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 2,
FileName:
'KET/Sequence-Mode-Replacement/sequence of peptides w_o natural analog (4Abz).ket',
SequenceName: 'sequence of peptides w/o natural analog (4Abz)',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 3,
FileName: 'KET/Sequence-Mode-Replacement/sequence of presets (A).ket',
SequenceName: 'sequence of presets (A)',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 4,
FileName:
'KET/Sequence-Mode-Replacement/sequence of presets without phosphate (SGNA(U)).ket',
SequenceName: 'sequence of presets without phosphate (SGNA(U))',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 5,
FileName:
'KET/Sequence-Mode-Replacement/sequence of presets without base (SGNA()ibun).ket',
SequenceName: 'sequence of presets without base (SGNA()ibun)',
ReplacementPositions: { LeftEnd: 1, Center: 3, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
},
{
Id: 6,
FileName: 'KET/Sequence-Mode-Replacement/sequence of sugars (UNA).ket',
SequenceName: 'sequence of sugars (UNA)',
ReplacementPositions: { LeftEnd: 1, Center: 3, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
},
{
Id: 7,
FileName: 'KET/Sequence-Mode-Replacement/sequence of bases (nC6n5U).ket',
SequenceName: 'sequence of bases (nC6n5U)',
ReplacementPositions: { LeftEnd: 1, Center: 3, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
},
{
Id: 8,
FileName: 'KET/Sequence-Mode-Replacement/sequence of phosphates (moen).ket',
SequenceName: 'sequence of phosphates (moen)',
ReplacementPositions: { LeftEnd: 1, Center: 3, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
},
{
Id: 9,
FileName:
'KET/Sequence-Mode-Replacement/sequence of unsplit nucleotides (2-Amino-dA).ket',
SequenceName: 'sequence of unsplit nucleotides (2-Amino-dA)',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 10,
FileName:
'KET/Sequence-Mode-Replacement/sequence of unsplit nucleotides w_o natural analog (5NitInd).ket',
SequenceName:
'sequence of unsplit nucleotides w/o natural analog (5NitInd)',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 11,
FileName: 'KET/Sequence-Mode-Replacement/sequence of CHEMs (A6OH).ket',
SequenceName: 'sequence of CHEMs (A6OH)',
ReplacementPositions: { LeftEnd: 1, Center: 3, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
},
{
Id: 12,
FileName:
'KET/Sequence-Mode-Replacement/sequence of unresolved nucleotide (5Unres).ket',
SequenceName: 'sequence of unresolved nucleotide (5Unres)',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
];

Expand Down Expand Up @@ -1555,44 +1555,44 @@ const twoSequences: ISequence[] = [
'KET/Sequence-Mode-Replacement/base to base connected two sequences of presets (U) w_o phosphates.ket',
SequenceName:
'base to base connected two sequences of presets (U) w_o phosphates',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 14,
FileName:
'KET/Sequence-Mode-Replacement/base to base connected two sequences of presets (U).ket',
SequenceName: 'base to base connected two sequences of presets (U)',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 15,
FileName:
'KET/Sequence-Mode-Replacement/base to sugar connected two sequences of presets (U) w_o phosphate.ket',
SequenceName:
'base to sugar connected two sequences of presets (U) w_o phosphate',
ReplacementPositions: { LeftEnd: 3, Center: 4, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 16,
FileName:
'KET/Sequence-Mode-Replacement/base to sugar connected two sequences of presets (U).ket',
SequenceName: 'base to sugar connected two sequences of presets (U)',
ReplacementPositions: { LeftEnd: 3, Center: 4, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 17,
FileName:
'KET/Sequence-Mode-Replacement/phosphate to base connected two sequences of presets (U).ket',
SequenceName: 'phosphate to base connected two sequences of presets (U)',
ReplacementPositions: { LeftEnd: 2, Center: 3, RightEnd: 4 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 18,
FileName:
'KET/Sequence-Mode-Replacement/phosphate to phosphate connected two sequences of presets (U) w_o base.ket',
SequenceName:
'phosphate to phosphate connected two sequences of presets (U) w_o base',
ReplacementPositions: { LeftEnd: 1, Center: 3, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
},
{
Expand All @@ -1601,82 +1601,82 @@ const twoSequences: ISequence[] = [
'KET/Sequence-Mode-Replacement/phosphate to phosphate connected two sequences of presets (U).ket',
SequenceName:
'phosphate to phosphate connected two sequences of presets (U)',
ReplacementPositions: { LeftEnd: 2, Center: 3, RightEnd: 4 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 20,
FileName:
'KET/Sequence-Mode-Replacement/phosphate to sugar connected two sequences of presets (U) w_o base.ket',
SequenceName:
'phosphate to sugar connected two sequences of presets (U) w_o base',
ReplacementPositions: { LeftEnd: 2, Center: 4, RightEnd: 6 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
},
{
Id: 21,
FileName:
'KET/Sequence-Mode-Replacement/phosphate to sugar connected two sequences of presets (U).ket',
SequenceName: 'phosphate to sugar connected two sequences of presets (U)',
ReplacementPositions: { LeftEnd: 3, Center: 4, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 22,
FileName:
'KET/Sequence-Mode-Replacement/two sequence of unsplit nucleotides (AmMC6T).ket',
SequenceName: 'two sequence of unsplit nucleotides (AmMC6T)',
ReplacementPositions: { LeftEnd: 4, Center: 5, RightEnd: 6 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 23,
FileName:
'KET/Sequence-Mode-Replacement/two sequences of bases (nC6n5U).ket',
SequenceName: 'two sequences of bases (nC6n5U)',
ReplacementPositions: { LeftEnd: 6, Center: 8, RightEnd: 10 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
},
{
Id: 24,
FileName:
'KET/Sequence-Mode-Replacement/two sequences of CHEMs (4aPEGMal).ket',
SequenceName: 'two sequences of CHEMs (4aPEGMal)',
ReplacementPositions: { LeftEnd: 6, Center: 8, RightEnd: 10 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
},
{
Id: 25,
FileName:
'KET/Sequence-Mode-Replacement/two sequences of peptides (D-gGlu).ket',
SequenceName: 'two sequences of peptides (D-gGlu)',
ReplacementPositions: { LeftEnd: 4, Center: 5, RightEnd: 6 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 26,
FileName:
'KET/Sequence-Mode-Replacement/two sequences of peptides w_o natural analog (Apm).ket',
SequenceName: 'two sequences of peptides w_o natural analog (Apm)',
ReplacementPositions: { LeftEnd: 4, Center: 5, RightEnd: 6 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
{
Id: 27,
FileName:
'KET/Sequence-Mode-Replacement/two sequences of phosphates (Test-6-Ph).ket',
SequenceName: 'two sequences of phosphates (Test-6-Ph)',
ReplacementPositions: { LeftEnd: 6, Center: 8, RightEnd: 10 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
},
{
Id: 28,
FileName: 'KET/Sequence-Mode-Replacement/two sequences of sugars (5A6).ket',
SequenceName: 'two sequences of sugars (5A6)',
ReplacementPositions: { LeftEnd: 6, Center: 8, RightEnd: 10 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
},
{
Id: 29,
FileName:
'KET/Sequence-Mode-Replacement/two sequences of unresolved nucleotide (5Unres).ket',
SequenceName: 'two sequences of unresolved nucleotide (5Unres)',
ReplacementPositions: { LeftEnd: 4, Center: 5, RightEnd: 6 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
},
];

Expand Down Expand Up @@ -2028,7 +2028,7 @@ test(`23. Verify functionality of 'Cancel' option in warning modal window`, asyn
Id: 7,
FileName: 'KET/Sequence-Mode-Replacement/sequence of bases (nC6n5U).ket',
SequenceName: 'sequence of bases (nC6n5U)',
ReplacementPositions: { LeftEnd: 1, Center: 3, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
};

Expand Down Expand Up @@ -2082,7 +2082,7 @@ test(`24. Verify functionality of 'Cancel' option for multiple selected monomers
Id: 7,
FileName: 'KET/Sequence-Mode-Replacement/sequence of bases (nC6n5U).ket',
SequenceName: 'sequence of bases (nC6n5U)',
ReplacementPositions: { LeftEnd: 1, Center: 3, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
};

Expand Down Expand Up @@ -2144,7 +2144,7 @@ test(`25. Verify undo/redo functionality after replacing monomers`, async () =>
Id: 7,
FileName: 'KET/Sequence-Mode-Replacement/sequence of bases (nC6n5U).ket',
SequenceName: 'sequence of bases (nC6n5U)',
ReplacementPositions: { LeftEnd: 1, Center: 3, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
};

Expand Down Expand Up @@ -2194,7 +2194,7 @@ test(`26. Copy and paste replaced monomers`, async () => {
Id: 7,
FileName: 'KET/Sequence-Mode-Replacement/sequence of bases (nC6n5U).ket',
SequenceName: 'sequence of bases (nC6n5U)',
ReplacementPositions: { LeftEnd: 1, Center: 3, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
};

Expand Down Expand Up @@ -2244,7 +2244,7 @@ test(`27. Verify switching from Macro mode to Micro mode and back without data l
Id: 7,
FileName: 'KET/Sequence-Mode-Replacement/sequence of bases (nC6n5U).ket',
SequenceName: 'sequence of bases (nC6n5U)',
ReplacementPositions: { LeftEnd: 1, Center: 3, RightEnd: 5 },
ReplacementPositions: { LeftEnd: 0, Center: 2, RightEnd: 4 },
ConfirmationOnReplecement: true,
};

Expand Down Expand Up @@ -2292,7 +2292,7 @@ test(`28. Verify saving and reopening a structure with replaced monomers in KET`
Id: 3,
FileName: 'KET/Sequence-Mode-Replacement/sequence of presets (A).ket',
SequenceName: 'sequence of presets (A)',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
};

const replaceMonomer: IReplaceMonomer = {
Expand Down Expand Up @@ -2348,7 +2348,7 @@ test(`29. Verify saving and reopening a structure with replaced monomers in MOL
Id: 3,
FileName: 'KET/Sequence-Mode-Replacement/sequence of presets (A).ket',
SequenceName: 'sequence of presets (A)',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
};

const replaceMonomer: IReplaceMonomer = {
Expand Down Expand Up @@ -2408,7 +2408,7 @@ test(`30. Verify saving and reopening a structure with replaced monomers in Sequ
Id: 3,
FileName: 'KET/Sequence-Mode-Replacement/sequence of presets (A).ket',
SequenceName: 'sequence of presets (A)',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
};

const replaceMonomer: IReplaceMonomer = {
Expand Down Expand Up @@ -2466,7 +2466,7 @@ test(`31. Verify saving and reopening a structure with replaced monomers in FAST
Id: 3,
FileName: 'KET/Sequence-Mode-Replacement/sequence of presets (A).ket',
SequenceName: 'sequence of presets (A)',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
};

const replaceMonomer: IReplaceMonomer = {
Expand Down Expand Up @@ -2529,7 +2529,7 @@ test(`32. Verify saving and reopening a structure with replaced monomers in IDT`
Id: 3,
FileName: 'KET/Sequence-Mode-Replacement/sequence of presets (A).ket',
SequenceName: 'sequence of presets (A)',
ReplacementPositions: { LeftEnd: 1, Center: 2, RightEnd: 3 },
ReplacementPositions: { LeftEnd: 0, Center: 1, RightEnd: 2 },
};

const replaceMonomer: IReplaceMonomer = {
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit dd20fad

Please sign in to comment.